laravel join-Tabelle, wenn Daten vorhanden
Was ist der beste Weg, um mitzumachen Tabelle A mit Tabelle B Tabelle B ist Daten und, wenn nicht gib mir einfach die Daten aus der Tabelle Ein? denn wenn ich es tun auf diese Weise, und es gibt keine Fotos, die in Tabelle B habe ich nicht bekommen, Daten aus dieser Zeile aus Tabelle A.
$data = Category::join('photos', 'categories.cover_id', '=', 'photos.id')
->get(['categories.id',
'categories.position',
'categories.visible',
'categories.created_at',
'categories.updated_at',
'categories.title',
'photos.filename']);
return $data;
meine Idee ist, nur um eine andere Anfrage zu bekommen werden alle Daten aus der Tabelle Ein, wo Kategorien.cover_id 0 (ohne join)
meine Tabellen sind nur
table A (categories)
-------------------------------
| id | title | cover_id | ... |
-------------------------------
| 1 | lorem | 1 | ... |
-------------------------------
| 2 | ipsum | 12 | ... |
-------------------------------
| 3 | dolor | 0 | ... |
-------------------------------
table B (Photos, there is no data for dolor, because i created dolor recently in table A)
---------------------------------
| id | title | filename | ... |
---------------------------------
| 1 | lorem | lorem.jpg | ... |
---------------------------------
| .. | ..... | ...jpg | ... |
---------------------------------
| 12 | ipsum | ipsum.jpg | ... |
---------------------------------
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie fein sein, die nur mit einem
leftJoin()
. Eine normale ("inner join"), liefern nur Ergebnisse aus beiden Tabellen. Aber ein left join liefert alle Ergebnisse aus der Links Tabelle (in diesem Fallcategories
) und alles, was existiert, aus der anderen Tabelle.Oder Sie könnten...
Nutzen Sie die Kraft des Eloquenten
Brauchen Sie nur um die Beziehung zu definieren (ich nehme an, Sie haben bereits eine
Photo
Modell) und dieser bekommt eine Menge einfacherUnd dann...
Werden und Sie haben die Fotos-Modell geschachtelt innerhalb der Kategorie Modelle. Zugänglich wie diese:
Eher würde ich es so machen: