2012-04-10 10 views
3

クライアントIDがクライアントIDと一致する必要があり、場所テーブルの地域フィールドが、場所IDに関連付けられた地域と一致している必要があります。ユーザーの場所に関連付けられます。Yiiアクティブレコード別のテーブルから名前付きスコープの複数の条件を追加する

私は3つのテーブルを持っています。現在のテーブル(t1)、テーブルrelation1は(t2)を参照し、テーブルt2は関係2を参照します(これをt3と呼びます)。

 

    $this->getDbCriteria()->mergeWith(array(
     'with' => $rel, 
     'condition'=>'relation1.client_id=:client_id AND 
         relation1.relation2.region=:region', 
     'params'=>array(':client_id'=>$client_id, ':region'=>$region), 
    )); 

return $this; 

Relation1は、このテーブルから削除されたテーブル内のリレーションです。 relation1が参照するテーブルには、relation2というリレーションがあり、region値を取得する必要がある場所に移動します。

私は2番目の条件とパラメータを削除しても動作するので、relation1は動作していますが、relation2は他のコンテキストでも動作しています。ここで彼らを見たいと思うのです。

 

    public function relations() 
    { 
     return array(
      'relation1' => array(self::BELONGS_TO, 't2', 't2_id'), 
     ); 
    } 

 

    public function relations() 
    { 
     return array(
      'relation2' => array(self::BELONGS_TO, 't3', 't3_id'), 
      ); 
    } 

これは動作するはずのように私は本当に感じています。どんな助け?

+0

私は間違っているかもしれませんが、これは私が[Yii github repository](https://github.com/yiisoft/yii/issues/586)で報告したバグのケースであると思います。簡単な修正をチェックして、それがあなたに役立つかどうか試してみてください。もしそうであれば、それはバグであり、1.1.11が出て修正するのを待つべきです。 – Johnatan

+0

私はあなたのパッチを無駄にしようとしました。しかし、返信をありがとう。他の考え?私が得るエラーは、relation1.relation2.region列が見つからないということですが、それ以外の方法でターゲットを設定する方法はわかりません。 – deez

+0

試着relation2.region =:地域?関係なし1。 – Johnatan

答えて

3

私は別のサイトから回答を得ました。興味のある方は、

 

    $this->getDbCriteria()->mergeWith(array(
      'with' => array(
       'relation1' => array(
         'condition' => 'relation1.column = :column_id', 
         'params' => array(':column_id'=>$column_id)), 
       'relation1.relation2' => array(
         'condition' => 'relation2.column2 = :column2', 
         'params' => array(':column2'=>$column2)) 
      ), 
     )); 
    return $this; 

ありがとうございました!

関連する問題