如何检查是否设置了leftJoin?

时间:2013-01-30 09:30:22

标签: php doctrine symfony-1.4 left-join

我有一个包含很少自定义搜索字段的表单过滤器。

addXXXQuery函数中,我必须在一个表上使用join,这对于某些字段是相同的。

我可以检查该特定表的innerJoin是否已在另一个addXXXQuery中设置?

[编辑]示例:

public function addIsPaidColumnQuery(Doctrine_Query $query, $field, $values)
{
  if ($values) {
    $rootAlias = $query->getRootAlias();
    $query->leftJoin($rootAlias.".Inscription i");
          ->andWhere("i.is_paid = ?", $values);
  }
}

public function addActTypeColumnQuery(Doctrine_Query $query, $field, $values)
{
  if ($values) {
    $rootAlias = $query->getRootAlias();
    $query->leftJoin($rootAlias.".Inscription i")
          ->leftJoin("i.Act a")

    $query->addWhere("a.act_type_id = ?", $values);
  }
}

2 个答案:

答案 0 :(得分:3)

好吧,你可以从查询中检索$params,并检查连接是否已经存在,如下所示:

public function addIsPaidColumnQuery(Doctrine_Query $query, $field, $values)
{
  if ($values)
  {
    $rootAlias = $query->getRootAlias();
    $leftjoin  = $rootAlias.".Inscription i";
    $params    = $query->getParams();

    if (!isset($params['join']) || (isset($params['join']) && !in_array($leftjoin, $params)))
    {
      $query->leftJoin($leftjoin);
    }

    $query->andWhere("i.is_paid = ?", $values);
  }
}

您可以在代码中看到how a leftJoin in added

答案 1 :(得分:1)

我找不到一个方法,它会告诉我是否设置了表的连接。然而,我越是想到这种方法的存在,它对它的影响就越小。因此,为了检查我是否已在过滤器查询中使用了连接,我设置了一个类变量$leftJoinInscriptionSet

private $leftJoinInscriptionSet = false;

...

public function addIsPaidColumnQuery(Doctrine_Query $query, $field, $values)
{
  if ($values) {
    $this->setLeftJoinInscription($query);

    $query->andWhere("i.is_paid = ?", $values);
  }
}

...


private function setLeftJoinInscription(Doctrine_Query $query) {
  if (!$this->leftJoinInscriptionSet) {
      $rootAlias = $query->getRootAlias();
      $query->leftJoin($rootAlias.".Inscription i");
      $this->leftJoinInscriptionSet = true;
  }
}