Laravel - 获取记录集合,如果不存在于另一个表中

时间:2016-09-24 14:13:48

标签: php mysql laravel eloquent

我需要从表中获取所有记录,如果这些记录不存在于另一个表中,例如
表'汽车'

| ID | Name_of_car  
+----+----------------  
| 1 .| Toyota  
+----+----------------  
| 2 .| Ford

表'Crashed_cars'

| car_id | crash_date  
+--------+----------------  
| 1 .....| 22-02-2016  

现在我想得到所有没有坠毁的汽车 - 我怎么能这样做呢? 目前我使用循环,但由于条目数量(约3000)我将不得不使用直接集合。这是我的疑问:

Cars::select( 'id', 'firstname', 'lastname', 'car', 'color' )->get();

2 个答案:

答案 0 :(得分:4)

最好的方法可能是获取所有坠毁车辆的ids,然后搜索所有其他车辆。换句话说,就像这样:

$crashedCarIds = CrashedCar::pluck('car_id')->all();
$cars = Car::whereNotIn('id', $crashedCarIds)->select(...)->get();

答案 1 :(得分:1)

您也可以使用一个查询获得相同的结果,这将提高您的操作速度。

可以使用 FULL OUTER JOIN 来实现这一目标,例如以下文章中的示例:

select * from dbo.Students S FULL OUTER JOIN dbo.Advisors A ON S.Advisor_ID=A.Advisor_ID where A.Advisor_ID is null

文章:http://www.datamartist.com/sql-inner-join-left-outer-join-full-outer-join-examples-with-syntax-for-sql-server没有。 6。

祝你好运!