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、从 B 到 C 以及从 C 到 D 连接有关系,在所有型号上都是如此。所以函数在A中看起来像这样它看起来像这样(我在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.
      ;
于 2016-08-09T09:08:27.963 回答