0

たとえば、A、B、C、D、E、F テーブルがあります。

A は B の外部キーとして a_id を持ちます。B は外部キーとして a_id と c_id を持ちます。C には外部キーとして d_id があります。D は外部キーとして e_id を持っています。

では、A から D への関係をどのように記述すればよいでしょうか。A は D と直接関係がないためです。

A から CI までの関係を以下のように書きます。

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

A から D への関係をどのように取得しますか?? オンラインのどこにも構文が見つかりません..ありがとう..

4

1 に答える 1

0

すべてのモデルでこのように、A から yii2 を開始したときに、B から C へ、および C から D への接続で B と関係を持たなければならないときに、同様の問題が発生しました。したがって、関数は A で次のようになります (私は id_A であるモデルのメイン ID に追加しました):

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 ) の検索モデルを設定する必要があります。検索はこのように見える必要があります。最初に、検索モデルに追加します。

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.
      ;
于 2016-08-09T09:08:27.963 に答える