Laravel:根据另一个表中的其他数据选择数据

时间:2019-06-09 17:40:09

标签: mysql laravel eloquent query-builder laravel-query-builder

我正在研究公交车站管理系统。我正在尝试在时间表中排队巴士。 所以我想要的是这个

  • 我想显示不在特定时间表队列中的特定站点的所有公交车。

    -就像如果一个站中有5辆公交车,那么其中2辆处于特定时间表的队列中,我想显示要选择的所有其他3辆公交车。

这是时间表表enter image description here

队列表 enter image description here

公交表

enter image description here

电台表

enter image description here

所以我这样做了

public function getBusQueue(Request $request)
{
    $id = $request->id; // id of the targert schedule

    // getting the target station id;
    $schedule = Schedule::find($id);
    $stations_id = $schedule->station_id;

    // getting the buses that are not in queues table
    $buses = DB::table("buses")->select('*')
                ->whereNotIn('bus_number',function($query) {
                    $query->select('bus_number')->from('queues');
                })
                ->where('Schedule_id', $id)
                ->where('station_id', $stations_id)
                ->get();

    $data = $buses;  
    return Response()->json($data);
}

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么此查询中的相关时间表是队列的时间表,而不是公共汽车的时间表。

(此外,您似乎在schedule_id表中输入了buses列名。它当前的名称为schedual_id。)

尝试将查询更改为以下内容:

$buses = DB::table("buses")->select('*')
    ->whereNotIn('bus_number',function($query) use($id) {
        $query->select('bus_number')
            ->from('queues')
            ->where('schedule_id', $id);
    })
    ->where('station_id', $stations_id)
    ->get();