我在Property和Feature之间有很多2-many关系。我必须从Property表中提取结果,但仅当两个或更多要素相关时才会提取结果。
IE中。物业#1与'游泳池'和'花园'有关。物业#2仅与“游泳池”有关。因此,当我要求拥有两者'游泳池'和'花园'的房产时,它应该只返回属性#1。
我尝试了各种可能的组合,比如复杂的'where()','whereIn','join ... with','exists()'等但无法解决它。它要么返回我所有的属性,要么没有,我真的不记得我尝试过的所有东西。请帮助,我已经浪费了8个小时而且它正在杀了我
答案 0 :(得分:2)
因此,换句话说,您要选择与多个特定功能相关的所有属性。
尝试:
function findPropertyForFeatures($features)
{
$q = Doctrine_Query::create()->from('Property p');
$i = 0;
foreach ($features as $f)
{
$i++;
$q->innerJoin("p.Feature f$i WITH f$i.id = {$f->id}");
}
return $q->execute();
}
功能应该是具有您希望加入的功能的Doctrine_Collection。将$f->id
替换为$f['id']
以支持Doctrine数组,或者如果您想提供一个填充了功能ID的简单数组,则替换为$f
。