使用 Laravel 的 WhereIn 搜索多个表
Using Laravel's WhereIn to search multiple tables
我有 3 SQL tables.
- 客户
- 事件
- client_events
因为一个客户端可以有多个事件,所以我制作了第三个 table 来显示这些关系。我正在使用以下代码检索所有具有与此事件匹配的记录的客户端,但是当有多个记录时它只返回 1 个记录。
$eventHosts = DB::table('clients')->whereIn('id', function($query) {
$query->select('client_id')->from('client_events')->where('event_id', '=', explode('/', $_SERVER['REQUEST_URI'])[2]);
})->get();
我忽略了什么?
您可以先获取 ID,然后传递给 whereIn
查询。
$clientIds = DB::table('client_events')
->where('event_id', explode('/', $_SERVER['REQUEST_URI'])[2])
->pluck('client_id')
->toArray();
$eventHosts = DB::table('clients')->whereIn('id', $clientIds)->get();
要在单个查询中更高效地获得结果,请尝试 join
$eventHosts = DB::table('clients') //select your main table
->join('client_events','client_events.client_id','=','clients.id') //join it on related columns
->where('client_events.client_id',explode('/', $_SERVER['REQUEST_URI'])[2])) //apply your condition on client_events
->get();
我有 3 SQL tables.
- 客户
- 事件
- client_events
因为一个客户端可以有多个事件,所以我制作了第三个 table 来显示这些关系。我正在使用以下代码检索所有具有与此事件匹配的记录的客户端,但是当有多个记录时它只返回 1 个记录。
$eventHosts = DB::table('clients')->whereIn('id', function($query) {
$query->select('client_id')->from('client_events')->where('event_id', '=', explode('/', $_SERVER['REQUEST_URI'])[2]);
})->get();
我忽略了什么?
您可以先获取 ID,然后传递给 whereIn
查询。
$clientIds = DB::table('client_events')
->where('event_id', explode('/', $_SERVER['REQUEST_URI'])[2])
->pluck('client_id')
->toArray();
$eventHosts = DB::table('clients')->whereIn('id', $clientIds)->get();
要在单个查询中更高效地获得结果,请尝试 join
$eventHosts = DB::table('clients') //select your main table
->join('client_events','client_events.client_id','=','clients.id') //join it on related columns
->where('client_events.client_id',explode('/', $_SERVER['REQUEST_URI'])[2])) //apply your condition on client_events
->get();