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]. 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.
