Ich versuche, eine Liste der Datensätze aus einer Tabelle zu erhalten, wo die PK nicht in einer zusammengesetzten Tabelle ist. Wenn Sie sehen unter Tabelle, ich versuche, alle candidates
, die nicht in einem pool
sind, so in diesem Fall sollte ich nur Eric
bekommen.beredt; Zeilen werden nicht in anderen Tabelle
+-------------+ +-------------+
| candidates | | pools |
+-------------+ +-------------+
| id | name | | id | name |
+----+--------| +----+--------|
| 1 | John | | 1 | Pool A |
| 2 | Richard| | 2 | Pool B |
| 3 | Eric | | 3 | Pool C |
+----+--------+ +----+--------+
+--------------------------+
| candidate_pools |
+--------------------------+
| pool_id | candidate_id |
+---------+----------------|
| 1 | 1 |
| 1 | 2 |
| 3 | 2 |
| 2 | 1 |
+---------+----------------+
Ich habe diese Antwort gefunden: https://laracasts.com/discuss/channels/eloquent/get-records-collection-if-not-exists-in-another-table
$crashedCarIds = CrashedCar::pluck('car_id')->all();
$cars = Car::whereNotIn('id', $crashedCarIds)->select(...)->get();
, die aber funktionieren sollte es in unserer ziemlich großen und schnell wachsenden Datenbank, auf einer Seite extrem ineffizient scheint, die von vielen oft zugegriffen wird von Leuten.
Im normalen MySQL würden Sie so etwas tun:
WHERE candidates.id NOT IN
(SELECT candidate_id
FROM candidate_pools
LEFT JOIN pools
ON candidate_pools.pool_id = pool.id
)
Hinweis: Die Tabellen sind nur eine einfache Darstellung, aber die eigentliche Datenbank Rüst- und Abfragen sind viel größer.
Warum versuchen Sie nicht durch eine eloquente Beziehung zu Ihrem Modell Einstellung? Hast du es schon gemacht? Beispiel: Pool-Modell hat viele Kandidaten und Kandidaten-Modell gehört zu Pool. –
@RutvijKothari Danke, aber das hängt nicht mit meiner Frage zusammen. – Richard