0
左結合テーブルのフィールドに条件を設定する必要があります。そのテーブルを定義する方法は左結合されました
だから私は知っておく必要があります: このテーブルは結合されたままですか? もしそうなら、新しい条件を追加するために使用する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%");
}
}
この解決策のみが正しいことを確認しました。 – cuhuak