Comments (14)
If you just want to run the ODM test suite against the adapter, check out the changes I have made in composer.json
in order to test this: alcaeus/mongodb-odm@93c3f06.
If you want to use mongodb-odm in a project running on PHP 7 (on PHP 5.x, please use ext-mongo directly) the changes will be different and need to be made in your package only. Unfortunately, I haven't found a way for this library to specify that it is replacing or providing ext-mongo
. This is why the root package needs to include a provide
block in composer.json
telling composer that it is providing the extension by other means. In most cases, it's also that package that should be specifying the requirement to mongo-php-adapter since it should not matter to libraries lower down in the dependency tree.
Quick example: let's say you have the following composer.json:
{
"name": "vendor/package",
"require": {
"doctrine/mongodb-odm": "^1.0.0"
}
}
After all changes, composer.json
should look like this:
{
"name": "vendor/package",
"provide": { "ext-mongo": "1.6.12" },
"require": {
"doctrine/mongodb": "dev-master",
"doctrine/mongodb-odm": "dev-master",
"alcaeus/mongo-php-adapter": "dev-master"
}
}
Please note that the dev-master
dependency for doctrine/mongodb and doctrine/mongodb-odm is only temporary until the new versions (1.3 and 1.1, respectively) are released.
As for getting errors while running tests, I'm going to guess it's due to gravitational waves. I'm more than happy to provide a more thorough explanation if you tell me what errors you're getting.
from mongo-php-adapter.
As for getting errors while running tests, I'm going to guess it's due to gravitational waves.
Damn you Einstein :P
from mongo-php-adapter.
@alcaeus thanks for info, gravitational waves just hilarious :P.
This is my composer.json config on fresh symfony 2.8 installtion:
...
"provide": { "ext-mongo": "1.6.12" },
"require": {
"php": ">=5.3.9",
"phpunit/phpunit": "5.2.*",
"symfony/symfony": "2.8.*",
"doctrine/orm": "^2.4.8",
"doctrine/doctrine-bundle": "~1.4",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.4",
"sensio/distribution-bundle": "~5.0",
"sensio/framework-extra-bundle": "^3.0.2",
"incenteev/composer-parameter-handler": "~2.0",
"alcaeus/mongo-php-adapter": "dev-master",
"doctrine/mongodb-odm": "^1.0.0",
"doctrine/mongodb-odm-bundle": "^3.0.0"
},
...
I've managed to install all vendors without composer complaining about ext-mongo
missing dependency.
But wanted to double check if ODM will work fine, so I run test included doctrine/mongodb-odm
tests: ~/www/symfony (searcher-bundle-mongodb)$ vendor/phpunit/phpunit/phpunit --configuration vendor/doctrine/mongodb-odm/phpunit.xml
expected result as here: https://twitter.com/alcaeus/status/697659616172359680 but instead got:
PHPUnit 5.2.4 by Sebastian Bergmann and contributors.
EEPHP Fatal error: Cannot use 'String' as class name as it is reserved in ~/www/symfony/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/String.php on line 23
PHP Stack trace:
PHP 1. {main}() ~/www/symfony/vendor/phpunit/phpunit/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() ~/www/symfony/vendor/phpunit/phpunit/phpunit:47
PHP 3. PHPUnit_TextUI_Command->run() ~/www/symfony/vendor/phpunit/phpunit/src/TextUI/Command.php:109
PHP 4. PHPUnit_TextUI_TestRunner->doRun() ~/www/symfony/vendor/phpunit/phpunit/src/TextUI/Command.php:158
PHP 5. PHPUnit_Framework_TestSuite->run() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:432
PHP 6. PHPUnit_Framework_TestSuite->run() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
PHP 7. PHPUnit_Framework_TestCase->run() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
PHP 8. PHPUnit_Framework_TestResult->run() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/Framework/TestCase.php:800
PHP 9. PHPUnit_Framework_TestCase->runBare() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/Framework/TestResult.php:685
PHP 10. PHPUnit_Framework_TestCase->runTest() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/Framework/TestCase.php:844
PHP 11. ReflectionMethod->invokeArgs() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/Framework/TestCase.php:984
PHP 12. Doctrine\ODM\MongoDB\Tests\DocumentManagerTest->testCustomRepositoryMappedsuperclassChild() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/phpunit/phpunit/src/Framework/TestCase.php:984
PHP 13. Doctrine\ODM\MongoDB\DocumentManager->getRepository() ~/www/symfony/vendor/doctrine/mongodb-odm/tests/Doctrine/ODM/MongoDB/Tests/DocumentManagerTest.php:26
PHP 14. Doctrine\ODM\MongoDB\Repository\DefaultRepositoryFactory->getRepository() ~/www/symfony/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php:510
PHP 15. Doctrine\ODM\MongoDB\Repository\DefaultRepositoryFactory->createRepository() ~/www/symfony/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Repository/DefaultRepositoryFactory.php:30
PHP 16. Doctrine\ODM\MongoDB\DocumentManager->getClassMetadata() ~/www/symfony/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Repository/DefaultRepositoryFactory.php:47
PHP 17. Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor() ~/www/symfony/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentManager.php:288
PHP 18. Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:225
PHP 19. Doctrine\ODM\MongoDB\Mapping\ClassMetadataFactory->doLoadMetadata() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:332
PHP 20. Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver->loadMetadataForClass() ~/www/symfony/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php:155
PHP 21. Doctrine\Common\Annotations\AnnotationReader->getPropertyAnnotations() ~/www/symfony/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Driver/AnnotationDriver.php:154
PHP 22. Doctrine\Common\Annotations\DocParser->parse() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php:226
PHP 23. Doctrine\Common\Annotations\DocParser->Annotations() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php:334
PHP 24. Doctrine\Common\Annotations\DocParser->Annotation() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php:641
PHP 25. Doctrine\Common\Annotations\DocParser->classExists() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php:707
PHP 26. Doctrine\Common\Annotations\AnnotationRegistry::loadAnnotationClass() ~/www/symfony/vendor/doctrine/mongodb-odm/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php:447
PHP 27. call_user_func:{~/www/symfony/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php:145}() ~/www/symfony/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php:145
PHP 28. class_exists() ~/www/symfony/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php:145
PHP 29. spl_autoload_call() ~/www/symfony/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php:145
PHP 30. Composer\Autoload\ClassLoader->loadClass() ~/www/symfony/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php:145
PHP 31. Composer\Autoload\includeFile() ~/www/symfony/vendor/composer/ClassLoader.php:301
But I've seen already this issue related with PHP7 types declaration compatibility in mongodb-odm repo, so I will look for solution there.
Thanks.
UPDATE
I've seen that you merged PR with fixing PHP7 incompat. issues: doctrine/mongodb-odm@f66da89
So I switched to master branch for doctrine/mongodb-odm
run the tests again but now im getting: https://gist.github.com/ustrugany/75917e780ba9ae733d0d
from mongo-php-adapter.
Ah, yeah. I've played around with this stuff for too long.
- The current stable version of doctrine/mongodb (1.2) still has a version check on
ext-mongo
to decide whether to use theMongo
orMongoClient
class. This check is removed in the upcoming 1.3 release, so you'll have to usedev-master
for now - I forgot to add this tocomposer.json
(I've added it now). - You'll have to use
dev-master
for doctrine/mongodb-odm as well (which I forgot to change in thecomposer.json
example above; I've added it in the meantime) to avoid issues running in PHP 7. - Since it looks like you're using annotation mapping in your documents, go ahead and change pretty much all annotations. The
String
,Integer
,Boolean
andFloat
classes can't be loaded in PHP 7 since the type names are now reserved words and can't be used. This is one reason why they have been deprecated for the upcoming 1.1 release. Instead of using them, please use theField
annotation:
/**
* This won't work
* @ODM\String
*/
protected $notWorkingField;
/**
* Use this in the future
* @ODM\Field(type="string")
*/
protected $workingField;
I've written all of these issues down to add them to the official documentation once the time comes.
from mongo-php-adapter.
@alcaeus I ended up with this composer.json
:
10 "provide": { "ext-mongo": "1.6.12" },
11 "require": {
12 "php": ">=5.3.9",
13 "phpunit/phpunit": "5.2.*",
14 "symfony/symfony": "2.8.*",
15 "doctrine/orm": "^2.4.8",
16 "doctrine/doctrine-bundle": "~1.4",
17 "symfony/swiftmailer-bundle": "~2.3",
18 "symfony/monolog-bundle": "~2.4",
19 "sensio/distribution-bundle": "~5.0",
20 "sensio/framework-extra-bundle": "^3.0.2",
21 "incenteev/composer-parameter-handler": "~2.0",
22 "alcaeus/mongo-php-adapter": "dev-master",
23 "doctrine/mongodb": "dev-master",
24 "doctrine/mongodb-odm": "dev-master",
25 "doctrine/mongodb-odm-bundle": "dev-master"
26 },
I have setup quickly simple CRUD application and for now it seems to be working.
Wondering though why doctrine/mongodb-odm
tests are still failing when try to run:
piotras@:~/www/symfony (searcher-bundle-mongodb)$ vendor/phpunit/phpunit/phpunit --configuration vendor/doctrine/mongodb-odm/phpunit.xml --stop-on-error --stop-on-failure
PHPUnit 5.2.4 by Sebastian Bergmann and contributors.
E
Time: 785 ms, Memory: 18.00Mb
There was 1 error:
1) Doctrine\ODM\MongoDB\Tests\DocumentManagerTest::testCustomRepository
MongoDB\Driver\Exception\RuntimeException: can't drop system ns
/home/piotras/www/symfony/vendor/doctrine/mongodb-odm/vendor/mongodb/mongodb/src/Operation/DropCollection.php:59
/home/piotras/www/symfony/vendor/doctrine/mongodb-odm/vendor/mongodb/mongodb/src/Collection.php:364
/home/piotras/www/symfony/vendor/doctrine/mongodb-odm/vendor/alcaeus/mongo-php-adapter/lib/Mongo/MongoCollection.php:236
/home/piotras/www/symfony/vendor/doctrine/mongodb-odm/tests/Doctrine/ODM/MongoDB/Tests/BaseTest.php:38
/home/piotras/www/symfony/vendor/phpunit/phpunit/src/TextUI/Command.php:158
/home/piotras/www/symfony/vendor/phpunit/phpunit/src/TextUI/Command.php:109
FAILURES!
Tests: 1, Assertions: 1, Errors: 1.
Notes:
I am using Mongo 3.2.
from mongo-php-adapter.
I had a similar error when running a large MongoDB project against the adapter, so I'm going to be checking that out as well. Quite weird though since the ODM test suite still runs fine for me here. I'll let you know once I find something, thanks for the report!
from mongo-php-adapter.
Maybe this is matter of Mongo version. Thanks for help!
from mongo-php-adapter.
It shouldn't since I'm running 3.2 here as well.
from mongo-php-adapter.
@ustrugany Since I can't reproduce this here, could you run the following in the mongo shell and paste the output?
use doctrine_odm_tests
show collections
from mongo-php-adapter.
Never mind - I've found the issue. System collections weren't properly filtered out so on databases migrated from older versions you would have the system.indexes
or system.namespaces
collections present which the adapter listed as well. Working on a fix now.
from mongo-php-adapter.
The issue with system collections was fixed in #59, should work for you now.
from mongo-php-adapter.
@alcaeus thanks for quick reaction. Yes tearDown()
phpunit method was trying to drop system*
collections. I bypassed it by filtering out names of collections, but even though i still was getting some tests failures. I will double check it.
from mongo-php-adapter.
Using this:
foreach ($collections as $collection) {
if (!preg_match('/system\..*/', $collection->getName())) {
$collection->drop();
}
}
Gave me result:
piotras@:~/www/symfony (searcher-bundle-mongodb)$ vendor/phpunit/phpunit/phpunit --configuration vendor/doctrine/mongodb-odm/phpunit.xml --stop-on-error --stop-on-failure
PHPUnit 5.2.4 by Sebastian Bergmann and contributors.
............................................................. 61 / 1045 ( 5%)
............................................................. 122 / 1045 ( 11%)
............................................................. 183 / 1045 ( 17%)
............................................................. 244 / 1045 ( 23%)
............................................................. 305 / 1045 ( 29%)
............................................................. 366 / 1045 ( 35%)
............................................................. 427 / 1045 ( 40%)
............................................................. 488 / 1045 ( 46%)
............................................................. 549 / 1045 ( 52%)
............................................................. 610 / 1045 ( 58%)
............................................................. 671 / 1045 ( 64%)
............................................................. 732 / 1045 ( 70%)
............................................................. 793 / 1045 ( 75%)
............................................................. 854 / 1045 ( 81%)
............................................................. 915 / 1045 ( 87%)
..........................................S.................. 976 / 1045 ( 93%)
............................................................. 1037 / 1045 ( 99%)
........ 1045 / 1045 (100%)
Time: 25.99 seconds, Memory: 130.00Mb
OK, but incomplete, skipped, or risky tests!
Tests: 1045, Assertions: 4132, Skipped: 1.
Yeah and your fix actually do similar thing. Nice. Thanks again for help. I think that this thread can be closed.
from mongo-php-adapter.
Glad to hear it worked for you!
from mongo-php-adapter.
Related Issues (20)
- support for NO_MAX_STALENESS and SMALLEST_MAX_STALENESS_SECONDS for readPreference HOT 2
- Receiving Notice: Undefined index: ok
- MongoDate conversion to DateTime fails in ambiguous edge case HOT 1
- No such command: 'group' HOT 1
- $collection->save Doesn't work on sharded collection (since 4.2) HOT 8
- DateTimeInterface converted to BSON in php 7.4 as empty BSONDocument
- Whether the latest version of Ext-mongodb is supported HOT 5
- Data returned in incorrect format HOT 1
- ns field deprecated HOT 1
- Issue with types after upgrading to PHP 7.4 HOT 1
- PHP 8.1.0, a class which implements Serializable deprecated HOT 2
- Need MongoDB 5.0 support HOT 3
- PHP 8.1 Support HOT 1
- PHP 8.2 compatibility HOT 1
- MongoClient readPreferenceTags options parameter HOT 2
- MongoDB\generate_index_name method doesn't exist. HOT 1
- Version 1.2.4 introduces regression HOT 1
- PHP 8.2 Error TypeConverter and MongoId HOT 1
- PHP Version Support HOT 1
- MongoDB ODM deserialisation issues
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mongo-php-adapter.