【问题标题】:orWhere not working with Laravel eloquent relationship queryorWhere 不使用 Laravel 雄辩的关系查询
【发布时间】:2014-06-27 03:56:24
【问题描述】:

在 Laravel 中,我有两个名为 Booking 和 Clients 的表。对于特定的预订,我与单个客户有 belongsTo 关系。当我向客户查询预订时,一切正常,除非我包括 orWhere。请看下面的代码sn-p。

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 的查询中使用 or 时,所有行都显示为好像 last_name 与每一行匹配。

它有什么问题?请帮忙。

【问题讨论】:

  • 检查以DB::getQueryLog() 运行的查询,例如
  • 以下是最后一个输出: select * from throttle where user_id = ?限制 1. 我正在使用 Sentry 包进行身份验证。上面的查询在管理页面中运行。
  • 这并没有告诉我们任何信息,请检查clients 表。只需运行您粘贴的代码并立即 dd(DB::getQueryLog()) 或使用 artisan tinker 在 CLI 中执行此操作
  • 在上面的代码给出输出之后运行 dd(DB::getQueryLog()):array(2) { [0]=> array(3) { ["query"]=> string (44) "select * from users where id = ? limit 1" ["bindings"]=> array(1) { [0]=> int(1) } ["time"]=> float( 1) } [1]=> array(3) { ["query"]=> string(52) "select * from throttle where user_id = ? limit 1" ["bindings"]=> array(1 ) { [0]=> int(1) } ["time"]=> float(1) } }。不知道为什么它不显示与预订表相关的查询。
  • 哦,好吧..因为您没有运行查询!在末尾附加get()first(),因此$bookings 将保存查询结果而不是查询生成器。

标签: php database laravel-4 eloquent


【解决方案1】:

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

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

所以显然它没有返回它应该返回的东西。

现在,要使其正常工作,您需要将这些约束添加为 sub where:

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

这是你需要的。

【讨论】:

  • 工作就像一个魅力!谢谢。
猜你喜欢
  • 2023-04-05
  • 2021-06-17
  • 2016-07-01
  • 2016-02-26
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 2019-06-27
  • 2018-04-02
相关资源
最近更新 更多