0

我如何渴望加载 Laravel Scout?

这是我的查询:

$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 构建器,传统的急切加载关系是不可能的。作为参考,我正在使用 Meil​​isearch。

4

1 回答 1

0

弄清楚了!它必须在查询之后完成,如下所示:

$results->load('owner', 'savedSubmissions');

与常规的急切加载相反,因为 Scout 使用自己的构建器。

于 2021-06-27T19:11:01.077 回答