在yii2我们如何通过关系呼叫

时间:2016-08-08 15:28:20

标签: yii2 relationship yii2-basic-app yii2-model

例如,有A,B,C,D,E,F表。

A中有a_id作为外键。 B有a_id和c_id作为外键。 C将d_id作为外键。 D将e_id作为外键。

现在我如何写一个从A到D的关系。因为A与D没有直接关系。

从A到C我写下如下关系。

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

我如何通过从A到D的关系?我在网上找不到任何语法.. 感谢..

1 个答案:

答案 0 :(得分:0)

当我开始使用yii2时,我遇到了类似的问题 从A你必须与B,从B到C和从C到D有关系 在所有型号上都是这样的连接。所以这个函数在A中看起来像这样(我在一个模型主ID中添加了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']来自您需要此模型所需的下一个模型的列,数据必须相关。 在此之后,您需要将app设置为主模型的搜索模型(A)。搜索必须看起来像这样。首先添加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.
      ;