问题描述
我有两张表公司和课程表 该表有以下字段
companies table
id,full_name,email,deleted_at
和课程表
courses table
id,company_id,course_name,deleted_at
现在我想检索没有删除公司的所有课程。所以在我的控制器中我添加了
public function index(Request $request){
$query = Courses::query();
$query = $query->leftJoin('companies','companies.id','=','courses.company_id');
$query->whereNull('companies.deleted_at');
if($request->get('filter_name')){
$query = $query->where('courses.name','like','%' . $request->get('filter_name') . '%');
}
return response()->json($query->paginate($request->get("perPage")));
}
当我运行上述程序时,它返回公司数据而不是课程。我哪里出错了或者我错过了什么?
解决方法
如果您在两个模型中都使用了预先加载,则可以使用这种方法。
$all_course = Courses::with(['company',function($query) {
return $query->whereNotNull('deleted_at');
}])->get();
如您所见,我在 Courses 模型中查询以返回所有课程,但我在 company
关系中添加了一些过滤器。其中,我使用 whereNotNull
仅获取未删除的公司。