Laravel集合查询,我要去哪里错了?

时间:2018-07-18 08:03:26

标签: php laravel

我的桌子看起来像这样

area_trip

|id|dispatch_id|trip_id|status|

equipment_trip

|equipment_id|trips_id|dispatch_id|

trips

|id|dispatch_id|status

我正在尝试将集合传递给我的资源。有人可以检查我的查询并告诉我我在做什么,因为以下查询返回的所有数据都与dispatch_id匹配,无论是否与equipment_id匹配。顺便说一句,我是laravel的新手。

return 
      Resources::collection(
        area_trip::where('dispatch_id', $request->dispatch_id)
    ->where('status', 1)
    ->orWhere('status', 9)

        ->whereHas('equipment_trip', function($query) use ($request) {
            $query->where('equipment_trip.equipment_id', '=', $request->equipment_id);
           })

            ->with(['equipment_trip', 'createdBy', 'updatedBy', 'area', 'trips'])
      ->orderBy('tripStartDate', 'ASC')
      ->orderBy('status', 'ASC')
      ->get());

这是在area_trip模型中设置的关系

public function equipment_trip()
{

    return $this->belongsTo(equipment_trip::class, 'trip_id', 'trips_id');

}

1 个答案:

答案 0 :(得分:0)

我相信您的whereHas子查询也是错误的,而不是where和or在哪里使用where,并且您可以定义所有必要的状态,请尝试以下操作:

Resource::collection(area_trip::where('dispatch_id', $request>dispatch_id)
    ->whereIn('status', [1, 9])
    ->whereHas('equipment_trip', function($query) use ($request) {
            return $query->where('equipment_id', '=', $request->equipment_id);
    })
    ->with(['equipment_trip', 'createdBy', 'updatedBy', 'area', 'trips'])
    ->orderBy('tripStartDate', 'ASC')
    ->orderBy('status', 'ASC')
    ->get());