我需要从表中获取所有记录,如果这些记录不存在于另一个表中,例如
表'汽车'
| 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();
答案 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
祝你好运!