Laravel雄辩的生成器,带有关系的3张桌子

时间:2019-07-10 11:56:14

标签: php laravel laravel-5 eloquent

我有3个模型,分别是contractscentersuser_centers

contractscenters之间的关系是1到N(1个中心有N个合同)

centersuser_centers之间的关系是1个中心,N为user_centers

我正在尝试雄辩地说一个通过user_iduser_centers表过滤)返回合同的函数

为此,我执行以下操作

    $query = Contract::query();
    $user_id = $request->query('userId');

    $query->when(request('user_id'), function ($q) use ($user_id) {
        $q->whereHas('centers.user_centers', function ($q) use ($user_id) {
            $q->where('user_id', $user_id);
        });
    });

这行不通,我不知道自己是否了解这种关系或雄辩。

谢谢

1 个答案:

答案 0 :(得分:1)

只需在模式上添加功能

class Contracts extends Model {
     ...
     public function centres()
     {
         $this->hasMany(Centres::class, 'centre_id', 'id');
     }
}

在有多个user_centres的1个中心中,在模型中使用此功能:

class Centers extends Model {
     ...
     public function user_centers()
     {
         $this->hasMany(user_centers::class, 'user_centers_id', 'id');
     }
}

雄辩:

Contract::with('centres')->get();