我正试图建立一个租车网站,我被搜索功能困住了。
输入将是取车日期和下车日期,结果应该是该期间可用车辆的列表。
这是我的桌子:
汽车:身份证、名称、种类等。
职位:身份证、客户姓名、客户第二姓名等。
发票:身份证(不相关)、位置证、车号、取车日期、取车日期。
这些是我的关系:
对于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

您必须添加预订模型,同时也改变了其他模型中的一些关系,但根据我上面的解释,我相信您可以解决这个问题。

10-08 18:34