当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.1查询生成器:获取用户的帖子,其主体包含搜索查询

邹海荣
2023-03-14

假设:

  1. 这是一个普通的博客应用程序

问题:

我想得到那些标题或正文包含搜索查询的帖子的“用户”。

我目前的代码:

// example of search queries
$search_queries = ['aaa', 'bbb', 'ccc'];

// column names to search in MySQL
$search_column_names = [
                        'users.name',
                        'posts.title',
                        'posts.body'
                        ];

$users = User::leftJoin('posts', 'users.id', '=', 'posts.user_id')
    ->orWhere(function($q) use ($search_queries, $search_column_names){
        foreach ($search_column_names as $key => $name) {
            $q->orWhere(function($q) use ($search_queries, $name){
                foreach ($search_queries as $key => $search_query) {
                    $q->where($name, 'like', '%' . $search_query . '%');
                }
            });
        }
    })->distinct('users.id')->get();

但我仍然有超过5个不同id的用户(最多50个)。我认为distinct(users.id)给了我一个理想的结果,但它不起作用。

我已经在网上搜索过了,但找不到解决办法。

提前感谢。

共有2个答案

刘阳舒
2023-03-14

我找到了解决办法。我将帖子表搜索分为两个,其中s。谢谢!

// column names to search in the database
$search_column_names = [
'users.name'
];

$users = User::
orWhere(function($q) use ($queries, $search_column_names){
    foreach ($search_column_names as $key => $name) {
        $q->orWhere(function($q) use ($queries, $name){
            foreach ($queries as $key => $value) {
                $q->orWhere($name, 'like', '%' . $value . '%');
            }
        });
    }
})
->whereIn('users.id', function($q) use ($queries){
    $q->select('user_id')
    ->from(with(new Post)->getTable())
    ->where(function($q2) use ($queries){
        foreach ($queries as $key => $value) {
            $q2->orWhere('posts.title', 'like', '%' . $value . '%');
        }
    });
}, 'or')
->whereIn('users.id', function($q) use ($queries){
    $q->select('user_id')
    ->from(with(new Post)->getTable())
    ->where(function($q2) use ($queries){
        foreach ($queries as $key => $value) {
            $q2->orWhere('posts.body', 'like', '%' . $value . '%');
        }
    });
}, 'or')
->get();
柯国安
2023-03-14

可以使用原始语句。

$users = User::whereRaw("id in(
                            select distinct user_id from posts
                            where title like :query or
                            body like :query
                            )" , ["query" =>  "%" . $search_query . "%"])->get();
 类似资料:
  • 如何在给定节点下列出多个属性的所有属性和各自的值。 例如,在下面的代码中,我只能搜索一个属性。但我需要搜索10个不同的属性(alttext、img、promos等),并获得相应的值(如果存在)。

  • 我对Sumologic中的搜索查询有点迷茫。我需要获取包含

  • 我有一些问题与WordPress和WP_Query。我想让帖子按meta_query和/或类别过滤,但我有以下问题:第一种类型的帖子有一个名为“类型”的自定义字段,必须用“练习”来填充,帖子必须在一个名为“级别”的类别中(这将在之前设置)。第二类帖子只有名为“类型”的自定义字段,必须用“测试”来填充。 我不知道如何把这两个条件凑在一起。正因为如此,我试图将它分成两个查询,然后合并它,就像这样: 这

  • 我正在创建一个旅游主题,我在其中创建了一些自定义帖子,如城市、地点、目的地和酒店,为了向这些自定义帖子添加更多信息,我创建了几个元框,其中包含一些元键,如地址、租金、酒店房间以及如何到达城市、目的地、,现在我在索引页上有一个搜索表单,可以根据酒店自定义帖子的自定义元键搜索酒店,我必须在函数中创建自己的自定义搜索函数。通过查看创建自定义搜索表单的wordpress教程,我只能有一个GET变量“?s=

  • 本文向大家介绍如何使用MySQL LIKE查询搜索包含%的列值?,包括了如何使用MySQL LIKE查询搜索包含%的列值?的使用技巧和注意事项,需要的朋友参考一下 要使用%搜索列值,语法如下- 让我们首先创建一个表- 使用insert在表中插入一些记录- 使用选择显示表中的所有记录- 这将产生以下输出- 这是使用类似查询的查询来搜索其中包含%的列值的查询- 这将产生以下输出-

  • 问题内容: 当表开始增长时,我担心WHERE子句中IN的性能。有没有人对这种查询有更好的策略?子查询返回的记录数比TradeLine表中的记录数增长得慢得多。TradeLine表本身以每天10个的速度增长。 谢谢你。 编辑:我使用了将子查询从WHERE移到FROM的想法。我对有助于此新查询的所有答案投了赞成票。 问题答案: 子句中的子查询不依赖于外部查询中的任何内容。您可以安全地将其移到子句中;一