2016-08-08 9 views
0

たとえば、A、B、C、D、E、Fの各テーブルがあります。In yii2関係を呼び出す方法

AはBの外部キーとしてa_idを持ちます。 Bは外部キーとしてa_idとc_idを持っています。 Cは外部キーとしてd_idを持っています。 Dには外部キーとしてe_idがあります。 Aは、私は以下のように関係を記述し、CからDの

に直接関連しないとして

は今どのように私はDへの関係を記述します。

public function C 
{ 
    return $this->hasMany(C::className(), ['c_id' => 'c_id']) 
      ->via('B'); 
} 

どのように私はAからDへの関係を得るのですか?私はAからyii2 を始めたとき、私はあなたが同じように、BからCへとCからD 接続に、Bとの関係を持っている必要があり、同様の問題があった..オンラインどこでも

答えて

0

を おかげ構文を見つけることができませんこれはすべてのモデルで。だから、この関数は、それは(私がID_AあるモデルメインIDのウィッヒで追加)このようになりますAで次のようになります。

public function B 
{ 
    return $this->hasMany(B::className(), ['a_id' => 'id_A']) 

} 

同じことは、あなたが持っているモデルBに、CにBのためになります

public function C 
    { 
     return $this->hasMany(C::className(), ['id_C' => 'c_id']) 

    } 

この接続を覚えておいてくださいC::className(), ['id_C' => 'c_id']は、次のモデルからの列です。このモデルに必要なのは、データが関連している必要があります。 これ以降、メインモデル(A)の検索モデルをappに設定する必要があります。検索はこのようにしなければなりません。まず、検索モデルを追加する:

public $id_C 
Public $c_id ... 

他のモデルから追加するすべての変数。そして、あなたは(それは彼らが安全になります)最初の行でそれらのすべてを追加した後、これは

public function rules() 
    { 
     return [ 
      [[......, 'id_C','c_id'...(all var you need) ]] 
      .....] } 

にもみ行でそれらを追加した後は、

public function search($params) 
    { $query = A::find() 
     ->select(...) 
     ->where (...) 
     ->joinWith(B)->joinWith(A.B)->joinWith(A.B.C).... how many you need. 
     ; 
に行きます
関連する問題