I'm using symfony2 and mongodb, until today, everything is OK, but I create a new document, and suddenly, appears this error :
"MongoException: zero-length keys are not allowed, did you use $ with double quotes?"
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$_repo = $dm->getRepository('CantaoCustomerBundle:CustomerTags');
$_repo->findOneByCustomer($customer);
The $customer
it's OK, the repository is empty, and my document class is like this :
/**
* @MongoDB\ID
**/
private $id;
/**
* @MongoDB\ReferenceOne(targetDocument="Tapronto\Mats\ProductBundle\Document\Tag", cascade={"persist"})
**/
private $tag;
/**
* @MongoDB\ReferenceOne(targetDocument="Tapronto\Mats\CustomerBundle\Document\Customer", cascade={"persist"})
**/
private $customer;
/**
* @MongoDB\Float
**/
private $points;
/**
* @MongoDB\Int
**/
private $viewed;
/**
* @MongoDB\Int
**/
private $brought;
/**
* @MongoDB\Int
**/
private $favorited;
/**
* @MongoDB\Date
* @Gedmo\Timestampable(on="create")
**/
private $createdAt;
/**
* @MongoDB\Date
* @Gedmo\Timestampable(on="update")
**/
private $updatedAt;
Can anyone help me, have some idea, I tried everything and nothing seems to work
I just fixed this by using the referenced object's ID instead of the reference object itself as my search term.
$_repo->findOneByCustomer($customer->getId());
EDIT: That isn't throwing the exception but it isn't actually returning anything either. I tried using new MongoId($id) as was suggested a few places (Doctrine MongoDB find by id), but that didn't work either. Finally, I found something in the full query builder that searches by references (note: this uses the object instead of the object's ID).
$dm->createQueryBuilder()->find('CantaoCustomerBundle:CustomerTags')
->field('customer')->references($customer)
->getQuery()->execute();
I feel like this should be done more simply (like you did originally), but this fix is working for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With