Eloquent 查询结果受关系条件限制

Eloquent query results limited by relation criteria

我有两个表,affiliates 和 meetings,我想构建 Eloquent 查询,它会列出所有 affiliates,但没有在特定日期和时间指定会议的那些。因此,结果应包含所有没有召开会议的分支机构以及有会议但未在指定日期和时间召开会议的分支机构。

用户:id、姓名、城市...

会议:ID、客户、日期、时间,user_id...

是否可以在没有连接或原始 sql(whereRaw 或 DB::raw)的情况下完成,如何实现?

测试数据用户:

array:3 [▼
  0 => array:5 [▼
    "id" => 2
    "name" => "John"
    "city" => "New York"
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:34:03"
  ]
  1 => array:5 [▼
    "id" => 3
    "name" => "Elisabeth"
    "city" => "Kansas City"
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  2 => array:5 [▼
    "id" => 4
    "name" => "Teodora"
    "city" => "New York"
    "created_at" => "-0001-11-30 00:00:00"
    "updated_at" => "-0001-11-30 00:00:00"
  ]
]

测试数据会议:

array:3 [▼
  0 => array:8 [▼
    "id" => 1
    "client" => "George P."
    "date" => "2015-05-15"
    "time" => "14:00:00"
    "approved" => 1
    "user_id" => 2
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  1 => array:8 [▼
    "id" => 2
    "client" => "Jack White"
    "date" => "2015-05-15"
    "time" => "12:00:00"
    "approved" => 1
    "user_id" => 2
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  2 => array:8 [▼
    "id" => 3
    "client" => "Philip B."
    "date" => "2015-05-16"
    "time" => "16:00:00"
    "approved" => 1
    "user_id" => 3
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
]

2015 年 5 月 15 日未在 12:00

开会的所有用户的预期结果
array:2 [▼
  0 => array:5 [▼
    "id" => 3
    "name" => "Elisabeth"
    "city" => "Kansas City"
    "created_at" => "2015-02-19 00:26:43"
    "updated_at" => "2015-02-19 00:26:43"
  ]
  1 => array:5 [▼
    "id" => 4
    "name" => "Teodora"
    "city" => "New York"
    "created_at" => "-0001-11-30 00:00:00"
    "updated_at" => "-0001-11-30 00:00:00"
  ]
]

感谢任何帮助。

假设您的用户模型有关系 meetings 您可以这样做:

$users = User::whereDoesntHave('meetings', function($q){
    $q->where('time', '12:00:00');
})->get();