Ich verwende Laravel 8. Ich habe 2 Tabellen und versuche, mit Eloquent bestimmte Spalten aus beiden Tabellen auszuwählen:

$ids = [1, 8, 14];
$food = Food::with(
            ['animals' => function ($query)
            {
                $query->select('id', 'name');
                $query->where('status', 1);
            }])
            ->select('id', 'type')
            ->whereIn('id', $ids)
            ->where('status', 1)
            ->get();

Wenn ich jedoch dem Food -Modell eine select -Methode hinzufüge, gibt Laravel null für die animals -Tabelle zurück.

Wenn ich für das Modell Food keine Auswahlen spezifiziere, gibt Laravel alles aus dem Modell Food und id, name aus der Tabelle animals zurück.

Wie kann ich bei Verwendung von Eager Loading gleichzeitig aus der Tabelle Food und Animal auswählen?

0
Radical_Activity 6 Okt. 2020 im 21:40

2 Antworten

Beste Antwort

Sie müssen sicherstellen, dass Sie die und Fremdschlüssel der ID auswählen, die für die Beziehung von beiden Seiten dieser Beziehung benötigt werden. Dies ermöglicht Eloquent, Eltern mit ihren Kindern in Einklang zu bringen.

1
lagbox 6 Okt. 2020 im 20:17

Versuchen Sie dies, geben Sie die Tabelle in select an.

Food::with(['animals' => function ($query) {
            $query->where('status', 1);
        }])
        ->select('food.id', 'animals.type', 'food.type')
        ->whereIn('id', $ids)
        ->where('status', 1)
        ->get();
-1
szebasztian 6 Okt. 2020 im 19:36