使用 Laravel 的 WhereIn 搜索多个表

Using Laravel's WhereIn to search multiple tables

我有 3 SQL tables.

  1. 客户
  2. 事件
  3. 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();