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

Laravel搜索中有很多关系

澹台建华
2023-03-14

我的Laravel项目有问题。我有范文和评论。一篇帖子有很多评论,这是我帖子评论中的关系。当我想获得所有帖子和评论时,一切都很好:

$posts = Post::with('comments')
        ->orderBy('id', 'desc')
        ->paginate(10);

我有问题,因为我想写搜索引擎的模型。我只想得到帖子和评论,如果搜索条件为真的评论。我尝试以下代码:

$posts = Post::with('comments')
        ->whereHas('comments', function($q) use($sort, $search){
            if($sort === 'answered'){
                $q->where('answered', '=', 1);
            }
            if($search){
                $q->where('content', 'like', '%'.$search.'%');
            }
        })
        ->orderBy('id', 'desc')
        ->paginate(10);

但这段代码返回所有要发布的注释,而不仅仅是条件为true的注释。

共有1个答案

司马项明
2023-03-14

您必须在中应用与相同的条件才能实现此目的。实例

$posts = Post::with(['comments' => function($q) use($sort, $search) {
       if($sort === 'answered'){
            $q->where('answered', '=', 1);
        }
        if($search){
            $q->where('content', 'like', '%'.$search.'%');
        }
    }])
    ->whereHas('comments', function($q) use($sort, $search){
        if($sort === 'answered'){
            $q->where('answered', '=', 1);
        }
        if($search){
            $q->where('content', 'like', '%'.$search.'%');
        }
    })
    ->orderBy('id', 'desc')
    ->paginate(10);

我想这会解决你的问题。让我知道它是否有效

 类似资料:
  • 我在Books表和Authors表之间有多对多的关系。透视表(author_book)包含author_id和book_id。

  • 我已经在Laravel项目中通过php artisan make:auth命令生成了注册表单。我想通过添加一些功能来定制它,用户可以在注册时选择自己的性别。我制作了一个genders表,该表的genders列包含两个值Man和Woman,并在users表中添加了gender_id列。我有很多关系,但当我尝试注册用户时,他已注册,但性别id列仍然为空。我不知道错在哪里。感谢您的帮助。这是我的密码。

  • 问题内容: 在两列上可能有hasMany关系吗? 我的表格有两列,和。 我希望我的关系匹配任一列。 在我的模型中 运行查询:。 我需要运行的查询是: 编辑: 我正在使用急切加载,我认为这将影响它的工作方式。 问题答案: 我认为不可能完全按照您的要求去做。 我认为您应该将它们视为独立的关系,然后在模型上创建一个新方法来检索两者的集合。 这样,您仍然可以获得在模型上进行预先加载和关系缓存的好处。

  • 尽管已经建立了许多L4关系,并且它们大部分时间都在工作。我在挣扎,不知为什么,我看不出哪里出了问题。这几乎可以肯定是显而易见的。 关系是一个任务有一个主题,主题有许多任务。 任务模型 主题模型 任务控制器 当我添加($task)时,关系数组为空。 对象(任务)#688(21){[“受保护的”:受保护的]=

  • 问题内容: 我有一个包含两个主表和一个数据库。它们之间存在多对多的关系。我想知道的是如何使用SQL使用多个标签搜索笔记? 例如,如果我有一个带有三个标签“一个”,“两个”和“三个”的注释“ test”,而我有一个带有标签“一个”和“两个”的第二个注释“ test2”,那么将执行什么SQL查询找到与标签“一个”和“两个”相关联的所有注释? 问题答案: 要获取 同时 带有标签“ One”和“ Two”

  • 我想索引和搜索使用Lucene索引的数据片段。 例如。物品及其颜色 搜索示例 可能的解决办法 根据我在答案中发现的,显然我可以使用这种格式将这些添加到一个字段中。 如果我现在用这种格式的数据进行搜索,我不会得到任何结果。 null