Symfony MongoDB ODM左连接查询生成器

时间:2018-02-19 11:57:22

标签: mongodb symfony left-join doctrine-odm odm

我有两个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;
}

如何将所有项目保持加入项目位置,按位置和按优先级排序。

1 个答案:

答案 0 :(得分:1)

为了使所有项目与项目位置保持连接,您可以使用inversedBy和maptedBy选项。

文档项目将如下所示:

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

了解更多here