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();

Узнайте больше здесь.

Другие вопросы по тегам