После обновления моих зависимостей, когда я получаю имя производного класса источника, я получаю обратно прокси-сервер вместо фактического имени класса, например. MongoDBODMProxies\\__CG__\\AcmeBundle\\Documents\\MyClass вместо AcmeBundle\Documents\MyClass.
Коллекция объектов, которые я пытаюсь фильтровать в этом случае, - это объекты Activity, среди их свойств есть свойство $source, которое является открытым типом, то есть для него нет явной карты дискриминатора, как я хотел он потенциально сможет хранить любой документ. Я снова пытаюсь заставить работать запрос, который фильтрует эти действия по соответствующим источникам, используя идентификатор и имя класса. Код запроса выглядит следующим образом:
Код: Выделить всё
public function findAllBySource($sources = array(), $date = null, $limit = 50)
{
$qb = $this->createQueryBuilder()->limit($limit)->sort('date', 'DESC');
if (!empty($date)) {
$qb->field('date')->lte($date);
}
$qb->addOr($qb->expr()->field('source')->exists(false));
foreach ($sources as $source) {
// $source is initialized as a proxy to the real class here
// using get_class($source) returns the class name to the
// proxy, not the actual FQCN, e.g. AcmeBundle\Document\MyClass
$expr = $qb->expr()
->field('source.$id')->equals(new \MongoId($source->getId()))
->field('source._doctrine_class_name')->equals(get_class($source));
$qb->addOr($expr);
}
$query = $qb->getQuery();
return array_values($query->execute()->toArray());
}
- doctrine/mongodb ^1.3.0
- doctrine/mongodb-odm ^1.1.0
- doctrine/mongodb-odm-bundle ^3.2.0
Подробнее здесь: https://stackoverflow.com/questions/384 ... -name-from
Мобильная версия