tarantool-php / mapper Goto Github PK
View Code? Open in Web Editor NEWMap tarantool tuples to php objects.
License: MIT License
Map tarantool tuples to php objects.
License: MIT License
Hi,
I see that migration is possible with this great Tarantool PHP Mapper repo. But there is no function to actually re-run the migration, is it possible for you to add this feature?
Hello.
I have bug with sequence plugin where sequence is created by create_index with sequence option true.
My code:
$mapper->getSchema()->createSpace('some_space', [
'is_sync' => true,
'if_not_exists' => true,
'engine' => 'memtx',
'properties' => [
'id' => 'unsigned',
'value' => 'string',
],
])
->addIndex([
'fields' => 'id',
'if_not_exists' => true,
'sequence' => true,
]);
$mapper->getPlugin(Tarantool\Mapper\Plugin\Sequence::class);
$result = $mapper->create('some_space', ['value' => $value]);
Exception:
eval:1: variable 'mapper_create_sequence' is not declared {"exception":"[object] (Tarantool\\Client\\Exception\\RequestFailed(code: 32): eval:1: variable 'mapper_create_sequence' is not declared at /application/vendor/tarantool/client/src/Exception/RequestFailed.php:32)
[stacktrace]
#0 /application/vendor/tarantool/client/src/Handler/DefaultHandler.php(48): Tarantool\\Client\\Exception\\RequestFailed::fromErrorResponse(Object(Tarantool\\Client\\Response))
#1 /application/vendor/tarantool/client/src/Handler/MiddlewareHandler.php(63): Tarantool\\Client\\Handler\\DefaultHandler->handle(Object(Tarantool\\Client\\Request\\EvaluateRequest))
#2 /application/vendor/tarantool/client/src/Middleware/AuthenticationMiddleware.php(41): Tarantool\\Client\\Handler\\MiddlewareHandler->handle(Object(Tarantool\\Client\\Request\\EvaluateRequest))
#3 /application/vendor/tarantool/client/src/Handler/MiddlewareHandler.php(69): Tarantool\\Client\\Middleware\\AuthenticationMiddleware->process(Object(Tarantool\\Client\\Request\\EvaluateRequest), Object(Tarantool\\Client\\Handler\\MiddlewareHandler))
#4 /application/vendor/tarantool/client/src/Middleware/RetryMiddleware.php(72): Tarantool\\Client\\Handler\\MiddlewareHandler->handle(Object(Tarantool\\Client\\Request\\EvaluateRequest))
#5 /application/vendor/tarantool/client/src/Handler/MiddlewareHandler.php(69): Tarantool\\Client\\Middleware\\RetryMiddleware->process(Object(Tarantool\\Client\\Request\\EvaluateRequest), Object(Tarantool\\Client\\Handler\\MiddlewareHandler))
#6 /application/vendor/tarantool/client/src/Client.php(170): Tarantool\\Client\\Handler\\MiddlewareHandler->handle(Object(Tarantool\\Client\\Request\\EvaluateRequest))
#7 /application/vendor/tarantool/mapper/src/Plugin/Procedure.php(50): Tarantool\\Client\\Client->evaluate('return _G.mappe...')
#8 /application/vendor/tarantool/mapper/src/Plugin/Procedure.php(43): Tarantool\\Mapper\\Plugin\\Procedure->validatePresence(Object(Tarantool\\Mapper\\Procedure\\CreateSequence))
#9 /application/vendor/tarantool/mapper/src/Plugin/Procedure.php(15): Tarantool\\Mapper\\Plugin\\Procedure->register('Tarantool\\\\Mappe...')
#10 /application/vendor/tarantool/mapper/src/Plugin/Sequence.php(47): Tarantool\\Mapper\\Plugin\\Procedure->get('Tarantool\\\\Mappe...')
#11 /application/vendor/tarantool/mapper/src/Plugin/Sequence.php(58): Tarantool\\Mapper\\Plugin\\Sequence->initializeSequence(Object(Tarantool\\Mapper\\Space))
#12 /application/vendor/tarantool/mapper/src/Plugin/Sequence.php(21): Tarantool\\Mapper\\Plugin\\Sequence->generateValue(Object(Tarantool\\Mapper\\Space))
#13 /application/vendor/tarantool/mapper/src/Repository.php(81): Tarantool\\Mapper\\Plugin\\Sequence->generateKey(Object(Tarantool\\Mapper\\Entity), Object(Tarantool\\Mapper\\Space))
#14 /application/vendor/tarantool/mapper/src/Mapper.php(45): Tarantool\\Mapper\\Repository->create(Array)
#15 /application/app/Components/Category/Repositories/CategoryRepository.php(40): Tarantool\\Mapper\\Mapper->create('some_space', Array)
"}
Tarantool version: 2.6.2
PHP version: 7.4.19
UPD:
This bug happened because sequence name is space_name_seq, but in your code you suppose sequence name is space_name.
Any space field contain type datetime
will problem
Extract property-based logic from Type to Property class.
$conn = $this->findOrFail('connection', ['uuid' => $uuid]);
$conn->gateway = $gateway;
$conn->socket = $socket;
$conn->save();
produces insert request, uuid is string
Hello!
I reproduce bug with nullable field who used in index.
My code for creating space:
$this->tarantoolMapper->getSchema()->createSpace('example', [
'if_not_exists' => true,
'engine' => 'memtx',
'properties' => [
'id' => 'unsigned',
'field1' => 'string',
'field2' => 'string',
'field3' => 'unsigned',
'field4' => 'unsigned',
'field5' => 'unsigned',
'field6' => 'unsigned',
],
])
->setPropertyNullable('field5')
->addIndex([
'fields' => 'id',
'if_not_exists' => true,
'sequence' => true,
'name' => 'index_1'
])
->addIndex([
'fields' => ['field2', 'field5'],
'unique' => false,
'if_not_exists' => true,
'name' => 'index_2',
]);
But, in createIndex
function we have some interesting case.
After that space field who define like nullable, stay not nullable.
There should be a way to define repository and entity class for each entity.
This way we can add custom methods and logic to entities and repositories.
Hi,
first of all thanks for a great plugin!
But it seems to me that the docs isnt "up-to-date".
For example
$globalSpace = $taraMapper->find('_space', ['name' => '_space']); echo $globalSpace->id; // 280
gives me
Trying to get property 'id' of non-object
I dumped the object, and its structure gives me:
array (size=1) 0 => object(Tarantool\Mapper\Entity)[600] public 'id' => int 280
So proper outputting the data in this case it:
$globalSpace[0]->id;
which ouputs 280
I assume since Tarantool has been upgraded the Docs needs to be updated here as well.
Once again, thanks for such a great repo!
regards Zilveer
Hi,
I am using SQL tables with mapper but I have issues with fetching correct data when using SQL tables.
I am using the lastest versions of php-client and php-mapper, the dev repo.
This is how you can re-produce the issue:
tarantoolctl enter myplace
\set language sql
CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, some_id INTEGER, test_id INTEGER)
INSERT INTO user (some_id, test_id) VALUES (78, 1)
INSERT INTO user (some_id, test_id) VALUES (43, 2)
INSERT INTO user (some_id, test_id) VALUES (12, 1)
With using php-mapper I am doing this:
$testing = $mapper->getRepository('USERS')->find(['TEST_ID' => 1]);
the result is:
array (size=3)
0 =>
object(Tarantool\Mapper\Entity)[602]
public 'ID' => int 1
public 'SOME_ID' => int 78
public 'TEST_ID' => int 1
1 =>
object(Tarantool\Mapper\Entity)[602]
public 'ID' => int 1
public 'SOME_ID' => int 78
public 'TEST_ID' => int 2
2 =>
object(Tarantool\Mapper\Entity)[602]
public 'ID' => int 1
public 'SOME_ID' => int 78
public 'TEST_ID' => int 1
Which means that is actually just returns all rows but with the content of the first row in the table when it should return:
array (size=3)
0 =>
object(Tarantool\Mapper\Entity)[602]
public 'ID' => int 1
public 'SOME_ID' => int 78
public 'TEST_ID' => int 1
1 =>
object(Tarantool\Mapper\Entity)[602]
public 'ID' => int 3
public 'SOME_ID' => int 12
public 'TEST_ID' => int 1
If you have any questions regarding this please let me know.
If you can fix this bug I would be very happy.
regards Zilveer
I need to implement upsert method. I can find entity by primary key (it is ok), but how change all entity data (from array) for save entity changes. May be somebody has method upser? (like the method findOrCreate but findAndUpdate).
I can`t find delete or remove method, how I can delete entity or tuple?
Hi,
I have updated to the latest Tarantool v2.3.0-107-ga377aaa9c (I do know that this it is only the development branch but I am using it for testing purpose).
However, when I was using v2.2 I had no problems creating procedures according to the example given at: ProcedureTest.php
But after upgrading to Tarantool v2.3 and purging all data I get the following error message:
No space _procedure
Any kind of help is appreciated.
regards Zilveer
Instead of using independent space, we need to extend mapping space and mark some properties that they are references. This can be achieved by adding new mapping field - property type.
We will put there space or primitive types like integer or string.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.