问题描述
这是我的查询:
$results = Submission::search($query,function ($meilisearch,$query,$options) use ($request) {
$resultsFilter = '';
if ($subchan = $request->input('subchan')) {
$resultsFilter = appendToFilter($resultsFilter,'subchan = ' . $subchan);
}
if ($incl_nsfw = $request->input('incl_nsfw')) {
if ($incl_nsfw != 1) {
$resultsFilter = appendToFilter($resultsFilter,'nsfw != 1');
}
} else {
$resultsFilter = appendToFilter($resultsFilter,'nsfw != 1');
}
if ($time = $request->input('time')) {
$NowTimestamp = strtotime(Carbon\Carbon::Now());
$timeString = $time;
switch ($time) {
case "hour":
$resultsFilter = appendToFilter($resultsFilter,'created_at_ts > ' . $NowTimestamp - 3600);
break;
case "day":
$resultsFilter = appendToFilter($resultsFilter,'created_at_ts > ' . $NowTimestamp - 86400);
break;
case "week":
$resultsFilter = appendToFilter($resultsFilter,'created_at_ts > ' . $NowTimestamp - 604800);
break;
case "month":
$resultsFilter = appendToFilter($resultsFilter,'created_at_ts > ' . $NowTimestamp - 2592000);
break;
case "year":
$resultsFilter = appendToFilter($resultsFilter,'created_at_ts > ' . $NowTimestamp - 31536000);
break;
}
}
if ($resultsFilter != '') {
$options['filters'] = $resultsFilter;
}
return $meilisearch->search($query,$options);
})
->paginate(15)
->withQueryString();
但是由于这使用了 Scout 构建器,传统的预先加载关系是不可能的。作为参考,我正在使用 Meilisearch。
解决方法
想通了!它必须在查询之后完成,如下所示:
$results->load('owner','savedSubmissions');
与常规的急切加载相反,因为 Scout 使用自己的构建器。