学说:复杂的JOIN问题

时间:2010-10-21 13:53:45

标签: php join doctrine

我在Property和Feature之间有很多2-many关系。我必须从Property表中提取结果,但仅当两个或更多要素相关时才会提取结果。

IE中。物业#1与'游泳池'和'花园'有关。物业#2仅与“游泳池”有关。因此,当我要求拥有两者'游泳池'和'花园'的房产时,它应该只返回属性#1。

我尝试了各种可能的组合,比如复杂的'where()','whereIn','join ... with','exists()'等但无法解决它。它要么返回我所有的属性,要么没有,我真的不记得我尝试过的所有东西。请帮助,我已经浪费了8个小时而且它正在杀了我

1 个答案:

答案 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