首页 文章

在yii2我们如何通过关系来呼唤

提问于
浏览
0

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

A在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

    当我从A开始使用yii2时,我遇到了类似的问题,你需要关系到B,从B到C以及从C到D连接,就像在所有模型上一样 . 所以这个函数看起来像是这样的,它看起来像这样(我添加了一个模型主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.
          ;
    

相关问题