搜索父标题和子标题并根据任一匹配返回结果

Posted

技术标签:

【中文标题】搜索父标题和子标题并根据任一匹配返回结果【英文标题】:Search both parent and child titles and return results based on either match 【发布时间】:2021-11-20 20:04:13 【问题描述】:

我怎样才能让它搜索projects.titleitems.title 并且如果它只匹配其中一个,仍然返回结果?现在如果它匹配一个项目,它不会显示,除非它也匹配一个项目标题,反之亦然。我明白为什么,但我可能不能急于做我需要做的事吗?

$query = Auth::user()->projects()->where('projects.title', 'LIKE', "%$this->search%");

$query->with(['items' => function ($query) 
    $query->where('items.title', 'LIKE', "%$this->search%");
    $query->with('tags');
]);

$query->get();

我想我需要类似“如果它匹配一个或多个项目标题,返回过滤的项目和相关项目。如果它只匹配项目标题,返回项目和所有相关项目”。想法?

让它与以下内容一起工作(以及 with 部分的类似查询):

$user->projects()->with('items')->where(function($query)
  $query->where('title', 'like', '...')->orWhereHas('items', function($query)
    $query->where('title', 'like', '...');
  );
);

【问题讨论】:

【参考方案1】:

将条件移至闭包:

$data = Auth::user()
            ->projects()
            ->with(['items' => function ($query) 
                $query
                    ->where('projects.title', 'LIKE', "%$this->search%")
                    ->orWhere('items.title', 'LIKE', "%$this->search%")
                    ->with('tags');
            ])->get();

【讨论】:

谢谢!我想我试过了,它无法从 with 函数内部看到项目。我会再试一次。

以上是关于搜索父标题和子标题并根据任一匹配返回结果的主要内容,如果未能解决你的问题,请参考以下文章

需要使用 jquery 对具有部分文本字段名称的值进行匹配并返回结果

根据返回的结果和前一个正则表达式的规则创建一个新的正则表达式 |索引正则表达式并查看正则表达式如何匹配子字符串

Select2 Ajax 不匹配结果

仅返回一个 <h3> 父标签的文本

选择带有“is null”子句的查询和子选择/左连接不返回结果

SQL Server - 从子-父-子中选择并返回多个结果集