Hi Tim, Thank you for your answer!
Yeah, I did add the type with ramsey/uuid-doctrine and it worked well but there was 2 issues: - The Id was handled by Doctrine at the insertion, which means the Id wasn't generated until the insertion in Database, which was the opposite of the advice in the talk (Maybe this issue can be solved by removing @GeneratedValue(strategy="CUSTOM") in my annotations and setting it by myself in the constructor) - The type chosen by ramsey/uuid-doctrine is char(36) for sqlite (returned by doctrine/dbal) and the talk was warning about that too. That's why I wanted to try to do it without ramsey/uuid-doctrine. If I want to set the type myself, I'm forced to ditch the "uuid" type in annotations, and if I do, I'm afraid Doctrine won't know what to do with the Uuid from ramsey/uuid. That's why I called the getBytes myself... I will try some tweaks, if you happen to have an idea, I would gladly take it! Thanks again! Le lundi 28 janvier 2019 17:44:20 UTC+1, Tim a écrit : > > IIRC, you shouldn't be using getBytes() at all. > Ramsey\Uuid\Doctrine\UuidBinaryType should be converting string-uuids > to/from the binary representation behind the scenes. The $id property on > your entities should remain a string. > > Are you doing this already: > https://github.com/ramsey/uuid-doctrine#binary-database-columns ? > > > > On Sat, Jan 26, 2019 at 6:28 AM Ronan Morin <[email protected] > <javascript:>> wrote: > >> Hi >> >> After listening to a talk by Ocramius, I wanted to try migrating my >> application to uuid primary keys. >> >> I first installed ramsey/uuid and then found out about >> ramsey/uuid-doctrine. I sucessfully installed and used both and ended up >> with a generatedValue for my primary key with a custom type (UuidInterface >> in php, uuid in doctrine annotation) from ramsey's library. >> >> It worked fine but I still had an ID generated at insertion, which means >> my Entity can't be in a valid state all the time. I removed the custom type >> and I tried to implement it by myself. >> >> I added a $this->id = Uuid::uuid4() to my constructor and went from that. >> I got it to working fine but it was storing the uuid to a char(36) type >> which the Ocramius talk warned about. >> >> I tried to switch to binary instead, here are the changes I had to >> address: >> - replace the id with Uuid::uuid4()->getBytes() to generate the binary >> content >> - change the type to binary(16) in doctrine annotation >> - I couldn't work with the UuidInterface anymore as getBytes() return a >> string, so I had to switch php type to string (I'm working with fully >> declared types hint with php so I had no choice) >> >> However, my application is now broken. I used to pass whole entities for >> doctrine to use as foreign keys on ManyToOne columns, at insertion I get >> this error: >> >>> INSERT INTO issue (iss_id, iss_resolved, iss_project_line_content, >>> iss_first_ins_id, iss_last_ins_id, iss_resolved_imp_id) VALUES (?, ?, ?, ?, >>> ?, ?)' with params [" >>> \x36\x14\x05\x08\x03\x92\x4b\xc7\x9a\x1c\x43\x5f\x12\x7f\xc7\x >>> b4", 0, "var $consumed = '';", Resource id #328, Resource id #328, >>> null]: >>> SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint >>> failed: issue.iss_last_ins_id#0 >>> [path]\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php(169): >>> Doctrine\DBAL\Driver\AbstractSQLiteDriver->convertException(' >>> An exception oc...', Object(Doctrine\DBAL\Driver\PDOException)) >> >> >> In blue, it's the binary uuid string, and in red, it's the entities that >> were passed to the other entity for the foreign key. >> >> I tried to resolve this by stopping passing whole entities between each >> other and only passing Id, so I had to change the whole types, but I then >> have an other error >> >> PHP Fatal error: Uncaught TypeError: Return value of >>> App\Entity\Inspection::getId() must be of the type string, resource >>> returned in [path] >> >> >> It seems that now all my Ids are returned by doctrine in resource type >> and I don't understand why or what to do about it. >> >> Could anyone give me a tip to what I'm doing wrong? Or maybe point me to >> a github project who successfully use uuid with binary types (In a database >> where uuid are not a native type)? >> >> Please tell me if you need examples of code. I tried to summarize >> everything but maybe I missed something. >> >> Thanks a lot! >> >> -- >> You received this message because you are subscribed to the Google Groups >> "doctrine-user" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at https://groups.google.com/group/doctrine-user. >> For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "doctrine-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/doctrine-user. For more options, visit https://groups.google.com/d/optout.
