2011-02-01 9 views
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%"); 
    } 

} 

答えて

0

あなたはこの作業を取得するために$query->getDqlPart('from')の戻り値を解析するために試みることができます。

+0

この解決策のみが正しいことを確認しました。 – cuhuak

関連する問題