或者没有使用Laravel雄辩的关系查询

时间:2014-05-09 11:59:59

标签: php database laravel-4 eloquent

在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);                 
            });
        }

使用注释掉的orWhere行,我可以通过用户指定的first_name与客户进行适当的预订。但是,当我在last_name的查询中使用或显示时,所有行都会显示为每行匹配last_name

它出了什么问题?请帮助。

1 个答案:

答案 0 :(得分:11)

问题是你现在有这样的代码:

WHERE foreignKey = X AND first_name = Y OR last_name = Z

显然,它没有回归它应该做的事情。

现在,为了使其工作,您需要将这些约束添加为子:

$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);
            });
        });

这将产生如下查询:

WHERE foreignKey = X AND (first_name = Y OR last_name = Z)

这就是你需要的。