Symfony MongoDB ODM Left Join Query Builder
У меня есть два документа ODM, один из которых содержит пункт
class Items {
/**
* @MongoDB\Field(name="item_name", type="string")
*/
protected $itemName;
}
и другой документ
class ItemLocation {
/**
* @var
* @MongoDB\ReferenceOne(targetDocument="Items")
*/
private $item;
/**
* @MongoDB\Field(name="priority", type="integer")
*/
protected $priority;
/**
* @var
* @MongoDB\ReferenceOne(targetDocument="Location")
*/
private $location;
}
Как я могу получить все оставленные элементы, соединяющиеся с местоположением элемента, которое фильтруется по местоположению и сортируется по приоритету.
0 ответов
Для того, чтобы все предметы оставались соединенными с местоположением предмета, вы можете использовать опции inversedBy и mappedBy.
Элементы документа будут выглядеть так:
class Items {
/**
* @MongoDB\Field(name="item_name", type="string")
*/
protected $itemName;
/**
* @MongoDB\ReferenceMany(targetDocument=ItemLocation::class, mappedBy="item")
*/
private $items_items;
}
Документ ItemLocation будет выглядеть так:
class ItemLocation
{
/**
* @var
* @MongoDB\ReferenceOne(targetDocument="Items", inversedBy="items_items")
*/
private $item;
/**
* @MongoDB\Field(name="priority", type="integer")
*/
protected $priority;
/**
* @var
* @MongoDB\ReferenceOne(targetDocument="Location")
*/
private $location;
}
Для генерации getter и setter используйте:
php bin/console doctrine:mongodb:generate:documents appBundle
Контроллер будет выглядеть так:
$dm = $this->get('doctrine_mongodb')->getManager();
$repository = $dm->getRepository('Items:Categorie');
$i = $repository->findOneBy(array('id' => 'example'));
$items = $i->getItemsItems();
Узнайте больше здесь.