Как определить, что таблица была объединена - PullRequest
0 голосов
/ 01 февраля 2011

Мне нужно установить условия для полей левой объединенной таблицы.

Так что мне нужно знать: Эта таблица была оставлена ​​присоединенной? Если да, то какой псевдоним левой объединенной таблицы использовать для добавления нового условия.

Вот пример текущего кода:

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 голосов
/ 03 февраля 2011

Вы можете попытаться проанализировать возвращаемое значение $query->getDqlPart('from'), чтобы заставить это работать.

...