-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for _id of binary type (to use UUIDs as _id) #1611
Conversation
@jenssegers any chance of merging this? |
I am wondering how hard is it to pass an object of type Binary instead of string. I don't like the auto casting behavior even for ObjectId, now we have it for Binary and for properties that ends with I hope for a branch that stop doing so: #1761 |
@mfauveau, do you run tests on this PR locally? Build fails in travis. |
@jenssegers, this commit has breaking changes, tests failed, because this change don't casting ObjectId to string |
* 👷 Travis * Add arg PHP-VERSION in Dockerfile * Delete empty row * Add build arg in docker-compose.yml * Add changes to Dcokerfile * Separate installing vendors by composer use official image of composer * Delete use composer image * Add default value PHP_VERSION * 🐳 Provide default docker arg * Fix issue using query builder first method * EmbedsMany respect primaryKey on association * fix typos * laravel/lumen 5.7.14 compatibility Updated model to be compatible with laravel/lumen 5.7.14 * Overrided whereIn method retrieval for relations, to force use standart whereIn nor whereInRawInteger * fix bug The main solution is to solve the bugs encountered in using database alone * reassigned getDatabaseName method * Remove dead code * Update Model.php * Update supported versions * Require Laravel 5.8 * Fix tests (mongodb#1724) * Update Dockerfile, add for methods setUp and tearDown return type hint in all tests, replace fire on dispatch * Resolve error test with touch * Use COMPOSER_VERSION in Dockerfile * Add alias for composer * Change parent method's names Broken commit in laravel: laravel/framework@2ee1892 * Remove changes in .travis.yml * Remove changes from Dockerfile * Revert changes in docker-compose.yml * Update image with mysql * 🐳 New travis docker setup * Update phpunit.xml (mongodb#1733) * Add arg options for creating collections with options (mongodb#1734) * fix chunkById for types other than ObjectId and laravel >= 5.6.25 (mongodb#1543) * Adds support for _id of binary type (mongodb#1611) * Create FUNDING.yml * Update FUNDING.yml * Update FUNDING.yml * Add hasIndex and dropIndexIfExists methods * Revert changes in Builder and Model for id keys, fix test for Queue (mongodb#1795) * Revert changes in Builder and Model for id keys, fix test for Queue * Fix format in Model * Get base query before update so that scopes are applied (mongodb#1799) Fixes mongodb#1798 * Return proper value instead of _id on QueryBuilder (mongodb#1747) Fixes mongodb#1741 * fix for non string id * use env values from phpunit.xml, update database.php and queue.php (mongodb#1738) * use env values from phpunit.xml, update database.php and queue.php * Add .editorconfig * Update QueueTest.php * Update phpunit.xml.dist * Use in casting instead intval * Change operator (-> to ::) * Code cleanup * Add hasIndex and dropIndexIfExists methods * ⬆️ Support for laravel 6 * ♻️ Make tests compatible with latest phpunit version * 🚨 Linting * ✅ Replace str_random usage * Update src/Jenssegers/Mongodb/Relations/EmbedsMany.php Co-Authored-By: Jens Segers <segers.jens@gmail.com> * fix filtering with operator not like issue * replcae string operation with exact match of (not like) * add test to not like oepration fix * fix regex demo code
While using the ObjectID type is the default implementation in MongoDB, it's technically possible to use anything for the primary key as long as you use a unique value. Some implementations (including mine) use a UUID as the primary key. UUIDs are stored in MongoDB as Binary types. The provider in its current state doesn't work in that situation.
These PR are the changes I've made to make it work. The only thing not included is a trait that automatically generates the UUID on the "creating", for example:
Note that my actual trait is actually more complete, with scopes and such.
I'm not sure this is the best way but it works for my use case and I'm curious to hear feedback. Surely I can be the only one with a need to use UUIDs as _id right? ;)