Php 在Laravel中查询关系
我正在尝试扩展我的网站搜索。您可以立即搜索报价的标题或描述。每个报价都有一个主题。主体有一个名称。我也想搜索主题名称,但我无法让它工作。 这就是我所做的努力:Php 在Laravel中查询关系,php,laravel,Php,Laravel,我正在尝试扩展我的网站搜索。您可以立即搜索报价的标题或描述。每个报价都有一个主题。主体有一个名称。我也想搜索主题名称,但我无法让它工作。 这就是我所做的努力: $adverts = Advert::orderBy('created_at', 'desc')->active(); if($search) $adverts = $adverts->whereHas('subjects', function($q) use ($search) { $q-&
$adverts = Advert::orderBy('created_at', 'desc')->active();
if($search)
$adverts = $adverts->whereHas('subjects', function($q) use ($search)
{
$q->where('name', 'like', '%$search%');
})
->where(function($query) use ($search) {
$query->where("title", "like", "%$search%");
$query->orWhere("description", "like", "%$search%");
})
->get();
没有任何内容被破坏,但查询不会像搜索一样找到任何主题名称为的报价
你有什么建议吗
谢谢Laravel中
函数的默认布尔运算符为和。这意味着您的代码实际上在说:
其中名称包含$search和title,或者说明包含$search
显然,你想要的是一个或
因此,只需将之后的where
更改为或where
$adverts = $adverts->whereHas('subjects', function($q) use ($search)
{
$q->where('name', 'like', '%$search%');
})
->orWhere(function($query) use ($search) {
$query->where("title", "like", "%$search%");
$query->orWhere("description", "like", "%$search%");
})
->get();
我很确定whereHas
后面的where
应该是。我建议使用双引号或连接变量。谢谢@lukasgeiter您修复了它@好极了!我要写一个答案,这样你就可以接受了:)