如何定义该表已左连接

时间:2011-02-01 07:51:41

标签: symfony1 doctrine

我需要为左连接表的字段设置条件。

所以我需要知道: 这张桌子已经加入了吗? 如果是这样,leftjoined表的别名用于添加新条件。

这是当前的代码示例:

class PStudentFormFilter extends BasePStudentFormFilter
{
  public function configure()
  {

    $this->setWidget('name', new sfWidgetFormInput());
    $this->setWidget('phone', new sfWidgetFormInput());

    $this->setValidator('name', new sfValidatorPass(array('required' => false)));
    $this->setValidator('phone', new sfValidatorPass(array('required' => false)));
  }


  private function leftJoinPersonalInfoQuery(Doctrine_Query $query)
  {
    if (isset($this->__leftJoinPersonalInfoQuery)) return;

    $this->__leftJoinPersonalInfoQuery = true;
    $query->leftJoin($query->getRootAlias().'.PersonalInfo pi');
  }

  public function addNameColumnQuery(Doctrine_Query $query, $field, $value)
  {
    $value = trim($value['text']);
    if (!$value)
    {
      return;
    }

    $value = str_replace(' ', '%', $value);

    $this->leftJoinPersonalInfoQuery($query);

    $query->andWhere("CONCAT(pi.surname, ' ', pi.first_name, ' ', pi.patronymic) LIKE ?", "%$value%");
  }

  public function addPhoneColumnQuery(Doctrine_Query $query, $field, $value)
  {

    $value = trim($value['text']);
    if (!$value)
    {
      return;
    }

    $value = str_replace(' ', '%', $value);

    $this->leftJoinPersonalInfoQuery($query);

    $query->andWhere("pi.mobile_phone LIKE ?", "%$value%");
  }

}

1 个答案:

答案 0 :(得分:0)

您可以尝试分析$query->getDqlPart('from')的返回值,以使其生效。