【问题标题】:Search with multiple tables搜索多个表
【发布时间】:2019-04-18 20:29:02
【问题描述】:

我有 3 个连接/有关系的表。

  1. 帖子表有多个标签和一个类别
  2. 类别表有很多帖子
  3. 标签表有很多帖子

我想要一个搜索功能,我知道如何只使用帖子进行搜索(基于标题)。

我尝试使用控制器中的 Where 搜索每个表,但仍然没有成功。

public function Search(Request $request)
    {
        $search = $request->search;
        $posts = post::where('title', 'like', "%{$search}%")->paginate(5);

        return view('search', compact('posts'))->with('result', $search);
    }

例如

我有一个标题为“测试”的帖子,类别为“Tost”,标签为“Tast and Tust”

所以如果我输入标题、类别或标签,我希望它显示出来。我怎样才能实现它?

【问题讨论】:

  • 这是 Post::where() 不是 post::where()
  • 你研究过 orWhere() 函数吗?您可以将您的表连接在一起并按照 orWhere('category.name', 'LIKE', '%data%');

标签: laravel laravel-5.8


【解决方案1】:

尝试使用 whereHas 方法(更多信息请查看https://laravel.com/docs/5.8/eloquent-relationships#querying-relations

所以会变成这样:

Post::query()
  ->where('title', 'like', "%$search%")
  ->orWhereHas('categories', function ($query) use ($search) {
    $query->where('name', 'like', "%$search%");
  })

【讨论】:

  • 谢谢你,这个可以了,奇怪的是我昨晚已经试过了,但是不行,现在可以了,哈哈,非常感谢先生。
【解决方案2】:

你必须这样使用。

Post::where('title', 'like', '%' . Input::get('search') . '%')->get();

【讨论】:

  • 谢谢你,但这不是我的问题,我已经可以从帖子表中搜索了。我不仅需要搜索帖子的标题,还需要搜索类别或标签。因此,如果我在搜索中键入或输入类别/标签/标题,它会输出与其相关的所有帖子。对不起,如果我的英语不好,希望你能理解:D
  • 除了你用句点分隔你的通配符和变量而不是对集合进行分页之外,他和你的没有区别。
猜你喜欢
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多