2017-09-03 12 views
0

Ich habe Probleme beim Abrufen von Datensätzen aus der Datenbank. Hier ist das Tabellenschema:Laravel verschachtelte Beziehung, wo 5.5 alle Datensätze zurückgeben

users 
-------------- 
id 
username 
password 
email 

divisions 
-------------- 
id 
name 

employee 
-------------- 
name 
birth_date 
status 
class 
division_id 
user_id 

projects 
-------------- 
id 
title 
body 
user_id 

Also, für die Beziehung Erklärungen:

relationship

Okay, ich versuche Projekt zu holen basierend auf division_id auf dem Tisch Mitarbeiter mit dem folgenden Code:

# query code 
$division_id = 10; 

$items = Project::with(['user.employee.division' => function($query) use ($division_id) { 
      $query->where('id', $division_id); 
}])->get(); 

Ich habe die erforderlichen goesOns, hasMany oder hasOne zu den Modellen hinzugefügt.

# User.php 
class User extends Authenticatable 
{ 
    public function employee() 
    { 
     return $this->hasOne('App\Employee', 'user_id'); 
    } 
    public function projects() 
    { 
     return $this->hasMany('App\Project', 'user_id'); 
    } 
} 

# Division.php 
class Division extends Model 
{ 
    public function employee() 
    { 
     return $this->hasMany('App\Employee', 'division_id'); 
    } 
} 

# Employee 
class Employee extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo('App\User', 'user_id'); 
    } 

    public function division() 
    { 
     return $this->belongsTo('App\Division', 'division_id'); 
    } 
} 

# Project.php 
class Project extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo('App\User', 'user_id'); 
    } 
} 

Also, was ist das Problem?

Hier ist die Sache, wenn ich den Abfragecode ausführen, bekomme ich alle Datensätze und die Division Objekt auf Employee-Beziehung Null zurückgibt.

Wenn jemand denkt, dass mein Code falsch ist, bitte erleuchte mich.

Danke.

+0

Welche Ausgabe, die Sie erwarten sind, wie es mir heißt es geben alle Benutzer und ihre Projekte unter Teilung 10. –

+0

Wenn ich die Abfrage Code ausführen, where-Klausel für division_id hat nicht funktioniert. Das Ergebnis ist die Rückgabe von Benutzern und ihren Projekten in allen Bereichen, ohne gefiltert zu werden. Ist es möglich, weil die Umwelt? – DefaultB2

Antwort

0

Also nach einigem Graben fand ich eine Antwort. Der Abfragecode sollte whereHas ändern:

# query code 
$division_id = 10; 

$items = App\Project::whereHas('user.employee.division', 
    function($query) use ($division_id) { 
     $query->where('divisions.id', $division_id); 
    }) 
    ->with(['user.employee.division']) // N+1 problem 
    ->get(); 

Referenz: Laravel 5.3 Constraining Eager Loads not working

Verwandte Themen