I somehow managed to miss this not only once (on the doc) but twice (in you reply)! Thanks a lot for your help!
Le lundi 28 janvier 2019 18:40:48 UTC+1, Tim a écrit : > > See the section of the uuid-doctrine README I linked in my previous > reply. The package provides two types: 'uuid' and 'uuid_binary'. You were > getting CHAR(36) because you were using 'uuid' in your mapping. Use > 'uuid_binary' to get a binary column. > > On Mon, Jan 28, 2019, 9:18 AM Ronan Morin <[email protected] > <javascript:> wrote: > >> 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]> 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]. >>>> 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. >>>> >>> -- >> 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.
