首页 > 解决方案 > 在 Laravel 中将表与其模型的默认范围连接起来

问题描述

目前,我们可以加入 2 个表,例如

    ModelA::join('table_b', 'table_a.id', '=', 'table_b.a_id');

使用这种方法,table_b 的模型(即:ModelB)的默认范围不会应用于查询。假设 ModelB 现在启用了 SoftDeletes,上面的连接将不包括whereRaw('table_b.deleted_at IS NULL'). 我知道我可以使用以下代码手动添加它。

ModelA::join('table_b', function($join) {
    $join->on('table_a.id', '=', 'table_b.a_id')
    ->whereRaw('table_b.deleted_at IS NULL');
});

我想知道是否有任何方法可以加入,以便在 ModeB 中自动应用默认范围。就像是:

ModelA::joinModel(ModelB::Class, 'table_a.id', '=', 'table_b.a_id');

标签: laravel-5eloquentlaravel-query-builder

解决方案


过滤掉相关Model上的记录,Eloquent方式——

ModelA::with('modelb')->whereHas('modelb', function($query){
      $query->filterThis()->filterThat();
})->get();

推荐阅读