san*_*gam 10 php database eloquent laravel-4
在Laravel中,我有两个名为Booking和Clients的表.对于特定的预订,我与一个客户有关系.当我查询客户进行预订时,除非我包含orWhere,否则一切正常.请查看下面的代码段.
if($client_name!=null)
{
$client_name='%'.$client_name;
$bookings=$bookings->whereHas('client',function($q) use ($client_name){
$q->where('first_name','LIKE',$client_name)
//->orWhere('last_name','LIKE',$client_name);
});
}
Run Code Online (Sandbox Code Playgroud)
使用注释掉的orWhere行,我可以first_name根据用户的指定与客户进行适当的预订.但是当我使用或在查询中时last_name,所有行都显示为好像last_name匹配每一行.
它出什么问题了?请帮忙.
Jar*_*zyk 13
问题是你现在有这样的代码:
WHERE foreignKey = X AND first_name = Y OR last_name = Z
Run Code Online (Sandbox Code Playgroud)
所以显然它没有回归应有的东西.
现在,为了使其工作,您需要将这些约束添加为子:
$bookings=$bookings->whereHas('client',function($q) use ($client_name){
$q->where( function ($q) use ($client_name) {
$q->where('first_name','LIKE',$client_name)
->orWhere('last_name','LIKE',$client_name);
});
});
Run Code Online (Sandbox Code Playgroud)
这将导致如下查询:
WHERE foreignKey = X AND (first_name = Y OR last_name = Z)
Run Code Online (Sandbox Code Playgroud)
这就是你需要的.