例如,有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的关系?我在网上找不到任何语法.. 感谢..
答案 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.
;