【问题标题】:Laravel wherebetween with orwherebetweenLaravel wherebetween with orwherebetween
【发布时间】:2018-09-27 05:47:09
【问题描述】:

我写了一个 Laravel 查询。我在名为“可共享”的列上使用whereBetweenorWhereBetween 以及where 语句,它应该返回一行。
但是这个查询没有考虑where 条件。只用了whereBetweenorWhereBetween。可能是什么原因。

我的查询

$childs = Program::whereIn('id', $programs_by_date)
                ->where('shareable', '=','1')
                ->wherebetween('starting_date', [$new_start_date,$new_end_date])
                ->orwherebetween('ending_date', [$new_start_date,$new_end_date])
                ->orderBy('starting_date')
                ->get(); 

->where('shareable', '=','1') 返回 0 行。可能是什么原因。

shareable 类型为枚举

【问题讨论】:

  • 您能解释一下您想从这个查询中实现什么吗?可能有更好的方法来做你现在正在做的事情。

标签: mysql laravel laravel-5 laravel-4


【解决方案1】:

您应该将 whereBetween & orWhereBetween 包裹在 where 中。试试这个:

$childs = Program::whereIn('id', $programs_by_date)
            ->where('shareable', '=','1')
            ->where(function($query) use ($new_start_date, $new_end_date){
                  $query->whereBetween('starting_date', [$new_start_date,$new_end_date])
                        ->orWhereBetween('ending_date', [$new_start_date,$new_end_date]);
                })
            ->orderBy('starting_date')
            ->get();

希望这会奏效。

【讨论】:

  • 不要忘记在第 5 行末尾添加分号
【解决方案2】:

你应该试试这个

$child = Program::whereIn('id', $programs_by_date)
                ->where('shareable', '=','1')
                ->whereRaw("( starting_date BETWEEN '".$new_start_date."' AND '".$new_end_date."' OR ending_date BETWEEN '".$new_start_date."' AND '".$new_end_date."' ")
                ->orderBy('starting_date')
                ->get();

【讨论】:

  • 当你尝试这个“类 DateTime 的对象不能被转换为字符串”时你会得到错误
  • 此示例对 SQL 注入开放,应使用 whereRaw 上可用的参数绑定。 laravel.com/docs/7.x/queries#raw-methods
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多