如何在Laravel中使用WhereNotIn和?

时间:2018-04-06 09:57:12

标签: php laravel

这是我创建的查询口号,我需要获取日期中可用的材料。

我从这里开始指导: Room Booking Query

如何解决这些错误?

Material::with(['orders_material' => function($query)  use ($begin_date,
    $end_date, $begin_hour, $hour_final) 

 {
    $query->whereNotIn(
    $query->where('date_begin', '>=', $begin_date)
    ->where('date_begin', '<=', $end_date)
    ->where('date_final', '>=', $begin_date)
    ->where('date_final', '<=', $end_date)
    ->where('hour_begin', '>=', $begin_hour)
    ->where('hour_begin', '<=', $hour_final)
    ->where('hour_final', '>=', $begin_hour)
    ->where('hour_final', '<=', $hour_final);
    //->wherePivot('Material_id', null)
    //->wherePivot('Orders_id', null)
    );
  }

语法不正确,我可以用什么语法?

1 个答案:

答案 0 :(得分:2)

在这种情况下,

whereHas是适当的条款。

此外,在查询介于最小值和最大值之间的值时,请使用whereBetween。它会简化您的查询:

Material::whereHas(['orders_material' => function($query) use ($begin_date, $end_date, $begin_hour, $hour_final) {
    $query->whereBetween('date_begin', [$begin_date, $end_date])
          ->whereBetween('date_final', [$begin_date, $end_date])
          ->whereBetween('hour_begin', [$begin_hour, $hour_final])
          ->whereBetween('hour_final', [$begin_hour, $hour_final]);
})->get();