首页 > 解决方案 > Laravel通过分页搜索多对多雄辩的结果

问题描述

我有树表:

  1. 帖子
  2. 类别
  3. 标签

帖子字段是:标题和文本类别字段是:标题标签字段是:标题

帖子和类别之间的关系是多对多的。帖子和标签之间的关系是多对多的。

我想在帖子的标题或正文中搜索关键字(喜欢),或者在帖子类别的标题中,或者使用雄辩和分页的帖子标签的标题中。

我该怎么做呢?

class Post extends Model
{
    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }

    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
}

class Category extends Model
{
    public function posts()
    {
        return $this->belongsToMany(Post::class);
    }
}

class Tag extends Model
{
    public function posts()
    {
        return $this->belongsToMany(Post::class);
    }
}


标签: searcheloquentpagination

解决方案


我认为这是最好的查询:


$posts = Post::where('title','LIKE','%'.$keyword.'%')
        ->orWhereHas('tags', function($query) use ($keyword) {
            $query->where('title', $keyword);
        })
        ->orWhereHas('categories', function ($query) use ($keyword) {
            $query->where('title', $keyword);
        })->orderBy('id', 'DESC')->paginate(10)->appends('keyword', $keyword);

推荐阅读