我正试图建立一个租车网站,我被搜索功能困住了。
输入将是取车日期和下车日期,结果应该是该期间可用车辆的列表。
这是我的桌子:
汽车:身份证、名称、种类等。
职位:身份证、客户姓名、客户第二姓名等。
发票:身份证(不相关)、位置证、车号、取车日期、取车日期。
这些是我的关系:
对于Car
型号:
public function invoices()
{
return $this->belongsTo('App\Invoice');
}
public function placements()
{
return $this->belongsTo('App\Placement');
}
对于
Placement
型号:public function invoice()
{
return $this->belongsTo('App\Invoice');
}
public function car()
{
return $this->hasOne('App\Car');
}
对于
Invoice
型号:public function cars()
{
return $this->hasMany('App\Car');
}
public function placements()
{
return $this->hasMany('App\Placement');
}
我在这个问题上看到了aquestion,但我真的不知道如何应用这个答案:
$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();
如果我尝试运行此:
$available = Car::doesntHave('placements')->get();
,仅用于测试目的,则会出现以下错误:未找到列:“WHERE子句”中的1054个未知列“CalpStsIDID”(SQL:SELECT*从“cc>”中不存在(选择*从
cars
其中placements
> cars
=cc> > cc>)你能帮帮我吗?如果没有一个确切的答复,也许有一个解释?
最佳答案
这条信息基本上是说你的车桌上没有placements_id
:
Column not found: 1054 Unknown column 'cars.placements_id' in 'where clause' (SQL: select * from `cars` where not exists (select * from `placements` where `cars`.`placements_id` = `placements`.`id`))
让我们看看汽车模型:
public function placements(){
return $this->belongsTo('App\Placement');
}
这是说,汽车属于安置,这将导致
cars.placements_id = placements.id
关系。另一个办法是
public function placements(){
return $this->hasMany('App\Placement');
}
这将导致
cars.id = placements.cars_id
关系。这完全取决于您希望如何构造数据。
编辑
为了满足您的需求,您可以按如下方式处理结构(显然,您将添加自己的列和数据,但这里是它的基本工作原理):
汽车:
id | name
------------
1 | Fiesta
2 | Focus
预订:
id | cars_id | placements_id | date_from | date_to
----------------------------------------------------
1 | 1 | 1 | 2018-10-16 | 2018-10-18
2 | 1 | 2 | 2018-10-19 | 2018-10-19
3 | 2 | 3 | 2018-10-19 | 2018-10-19
安置
id | first_name | surname
--------------------------
1 | Jeff | Hardy
2 | Matt | Hardy
3 | James | Giraffe
您必须添加预订模型,同时也改变了其他模型中的一些关系,但根据我上面的解释,我相信您可以解决这个问题。