Laravel在多个表中搜索

时间:2018-04-14 06:39:34

标签: laravel eloquent

我在一个模型中创建了一个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个额外的模型。我怎样才能做到这一点?提前致谢。

1 个答案:

答案 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
}

希望这会有所帮助:)