我在一个模型中创建了一个searchScope。这很完美。但我需要为多个模型创建此搜索字段。当我搜索字符串时,它必须扫描其他表。到目前为止我做了什么:
public function scopeSearch(Builder $query, $search)
{
$query->whereHas('translations', function ($q) use ($search) {
$q->where('value', 'like', '%' . $search . '%');
})
->orWhere('title', 'LIKE', '%' . $search . '%')
->orWhere('sub_body', 'like', '%' . $search . '%')
->orWhere('body', 'like', '%' . $search . '%');
}
翻译表包含所有其他模型的翻译值。非常好。因为我只想在此查询中添加2-3个额外的模型。我怎样才能做到这一点?提前致谢。
答案 0 :(得分:0)
这样做的一种方法是你可以用父表开始搜索,然后继续。如果你想同时搜索帖子,评论和他们的回复,那么你可以从父表开始,即帖子。
public function scopeSearchGlobal($query, $search){
$query->where('body', 'LIKE', '%' . $search . '%');
$query->with(['comments', function($comment) use ($search){
$comment->where('comment', 'LIKE', '%' . $search . '%');
$comment->with(['replies' => function($reply) use ($search){
$reply->where('reply', 'LIKE', '%' . $search . '%');
}]);
}]);
}
请记住,此搜索适用于与之相关的表。这是搜索多个表的一般想法。 但是如果您有翻译表并且它具有所有其他模型翻译的值,那么您只需搜索翻译表并调用每个关系。
public function scopeSearch($query, $search)
{
$query->whereHas('translations', function ($q) use ($search) {
$q->where('value', 'like', '%' . $search . '%');
})->with('posts', 'blogs', 'comments', 'replies');
// define relations that are associated with translations model and call
them here. So it will search just the translations table and brings all
associated results
}
希望这会有所帮助:)