【发布时间】:2015-06-19 22:17:50
【问题描述】:
我有两个实体,我们称它们为“Girl”和“Feature”。实体“Girl”与“Feature”处于单向多对多关系。
我有一个带有简单搜索表单的页面。我想按特征搜索女孩。我在服务器端提交表单后得到的是功能 ID 列表,而我应该返回的是一个女孩列表,这些女孩已选择列出的功能与该女孩具有的所有其他功能。。 p>
让我们看看这个:
╔════════════╦═══════════════╦═══════════════╦═══════════════╗
║ ║ (1) Feature 1 ║ (2) Feature 2 ║ (3) Feature 3 ║
╠════════════╬═══════════════╬═══════════════╬═══════════════╣
║ (1) Girl 1 ║ Yes ║ Yes ║ No ║
║ (2) Girl 2 ║ Yes ║ No ║ Yes ║
╚════════════╩═══════════════╩═══════════════╩═══════════════╝
括号中的数字是实体ID。
我首先要做的是:
$qbd = $this->getQbd('AppBundle:Girl', 'g')
->select('g, gf')
->leftJoin('g.features', 'gf');
从 URL 获取数据(特征 ID)(因为表单使用 GET 方法)并将它们放入 $features 数组后,我执行如下操作:
if (!empty($features)) {
$qbd->where(
$qbd->expr()->in('gf.id', ':features')
)->setParameter('features', $features);
}
尽可能简单。
一切都很好。几乎。
当我尝试搜索具有特征 id 等于 2 和 3 的女孩时,我得到了两个女孩的结果(这很好)。可悲的是,他们每个人都只有功能 2 和 3(对于这种情况;当我尝试为他们每个人执行 $girl->getFeatures() 时),即使它们都应该包含对功能 1 的引用。
我做错了什么?我已经尝试为这种情况构建其他更复杂的查询,但最后我遇到了同样的问题。
【问题讨论】:
标签: mysql orm doctrine-orm query-builder