laravel 中的whereHas 方法可以写成闭包函数的形式吗
$data = Programme::
select(['id', 'user_id', 'teacher_id', 'start_time', 'status', 'audition', 'evaluate', 'remarks']);
if ($subject_id) {
$data = $data->
whereHas('appointment', function ($query) use ($subject_id) {
$query->whereHas('subject', function ($query) use ($subject_id) {
$query->where(['subject_id' => $subject_id]);
});
});
}
$data = $data->
with(['student' => function ($query) {
$query->select(['id', 'name']);
}])->
with(['user' => function ($query) {
$query->select(['id', 'name']);
}])->
with(['appointment' => function ($query) {
$query->select(['id', 'teacher_time_id', 'subject_id', 'subject_level_id'])->
with(['subjectLevel' => function ($query) {
$query->select(['id', 'level_name']);
}]);
$query->with(['subject' => function ($query) {
$query->select(['id', 'subject_name']);
}]);
}])->where($where)->whereBetween('start_time', [$start_time, $end_time])->orderBy('start_time', 'asc')->simplePaginate($limit)->toArray();
return $data;
目前代码是这样的 中间有个if (subject) 为了避免报错 我使用了$data = $data->xxx 这样的形式 问下还有其他方法吗
$data = Programme::
select(['id', 'user_id', 'teacher_id', 'start_time', 'status', 'audition', 'evaluate', 'remarks'])->
whereHas('appointment', function ($query) use ($subject_id) {
if ($subject_id) {
$query->whereHas('subject', function ($query) use ($subject_id) {
$query->where(['subject_id' => $subject_id]);
});
}
})->
with(['student' => function ($query) {
$query->select(['id', 'name']);
}])->
with(['user' => function ($query) {
$query->select(['id', 'name']);
}])->
with(['appointment' => function ($query) {
$query->select(['id', 'teacher_time_id', 'subject_id', 'subject_level_id'])->
with(['subjectLevel' => function ($query) {
$query->select(['id', 'level_name']);
}]);
$query->with(['subject' => function ($query) {
$query->select(['id', 'subject_name']);
}]);
}])->where($where)->whereBetween('start_time', [$start_time, $end_time])->orderBy('start_time', 'asc')->simplePaginate($limit)->toArray();
写成这种形式并不能满足需求 ╮(╯▽╰)╭