从租赁桌

时间:2018-02-14 18:47:16

标签: php mysql database laravel

我的桌子有租金

id| user_id| car_id | starting_date | ending_date

这里是汽车表

id | name

我不知道如何处理这种情况。我有N辆汽车,而且我想只返回特定日期的可用汽车。

例如我想在这段时间租一辆车: 20.02.2018 - 23.02.2018

但我不知道如何使用Laravel检查每一个案例,看看那段时间是否有车。

1 个答案:

答案 0 :(得分:0)

使用whereDoesntHave()方法。我假设你已经定义了rentals关系:

$date1 = Carbon::parse('20.02.2018')->startOfDay();
$date2 = Carbon::parse('23.02.2018')->endOfDay();
$available = Car::whereDoesntHave('rentals', function($q) use($date1, $date2) {
    $q->whereBetween('starting_date', [$date1, $date2])
      ->orWhereBetween('ending_date', [$date1, $date2])
      ->orWhere(function($q) use($date1, $date2) {
          $q->where('starting_date', '<', $date1)
            ->where('ending_date', '>', $date2);
      });
})
->get();

如果您没有这种关系,请在Car模型中定义:

public function rentals()
{
    return $this->hasMany(Rental::class);
}