我试过分离这两个查询,当它们分离时,它们都能工作,但当我试着合并它们时,却不能工作
public function getTestsByCourseId($courseId, $lang)
{
$nonImportantCount = DB::table('tests')->where(['course_id' => $courseId, 'published' => true])->value('random_questions');
$tests = $this->test->withTrashed()
->where(['course_id' => $courseId, 'published' => true])
->with(['questions' => function ($q) use ($lang, $nonImportantCount) {
$q->where(function ($q) use ($lang, $nonImportantCount) {
$q->where('important_question', true)
->where('published', true)
->with('translations', function ($q) use ($lang) {
$q->whereHas('language', function ($q) use ($lang) {
$q->where('short_code', $lang);
});
})
->with(['questionOptions' => function ($q) use ($lang) {
$q->with('translations', function ($q) use ($lang) {
$q->whereHas('language', function ($q) use ($lang) {
$q->where('short_code', $lang);
});
});
}]);
if ($nonImportantCount > 0) {
$q->orWhere(function ($q) use ($lang, $nonImportantCount) {
$q->where('important_question', false)
->where('published', true)
->with('translations', function ($q) use ($lang) {
$q->whereHas('language', function ($q) use ($lang) {
$q->where('short_code', $lang);
});
})
->with(['questionOptions' => function ($q) use ($lang) {
$q->with('translations', function ($q) use ($lang) {
$q->whereHas('language', function ($q) use ($lang) {
$q->where('short_code', $lang);
});
});
}])
->inRandomOrder()
->take($nonImportantCount);
});
}
});
}]);
return $this->appendTranslations($tests, $lang)->get();
}
字符串
我得到的错误:
调用未定义的方法Illuminate\Database\Eloquent\Builder::merge()”
我有测试的问题,可以是重要的或不重要的。每个重要的问题都需要进行测试,但不重要的问题是随机选择的,并且该问题的数量有限(nonImportantCount)
1条答案
按热度按时间wfveoks01#
因为在Laravel的查询构建器中没有merge()函数。您可以使用一个查询,在where()子句中使用条件。
您可以使用以下更新的查询获取所有“重要”问题和随机的一组“非重要”问题:
字符串