2017-05-21 2 views
0

Ich habe vier Tabellen, die departments ist, users, items, items_inventoriesLaravel eloquent anfragende mit mehreren Beziehungen

Die Beziehung ist wie folgt:

A user hat einen zugeordneten department. Eine item hat eine zugewiesene department. item_inventories hat viele Gegenstände.

Struktur:

users 
->id 
->name 
->password 
->access_type (department_id) 

departments 
->id 
->name 

items 
->id 
->name 
->department_id 

items_inventories 
->id 
->item_id 
->qty 

Meine Modelle:

class Item extends Model 
{ 
    public function department() 
    { 
     return $this->hasOne('App\Http\Models\Department', "id", "department_id"); 
    } 
} 


class ItemsInventory extends Model 
{ 
    public function item() 
    { 
     return $this->hasOne('App\Http\Models\Item', "id", "item_id"); 
    } 
} 

In meinem items_inventories wie kann ich alle Elemente abfragen, die zu einer bestimmten Abteilung gehört? Seit items hat bereits eine Beziehung zu departments, Wie kann ich abfragen wie: Wählen Sie alle Elemente in items_inventories wo Element department_id gleich 3 ist?

Mein Ziel ist, ich habe einen Benutzer, der angemeldet ist, und ich kann die ihm zugewiesene Abteilung über access_type (Abteilung_ID) zugreifen, wenn meine Seite lädt, möchte ich nur Elemente in der items_inventories, die zugewiesen ist zu seiner/ihrer Abteilung. Ich habe bereits überprüft: https://laravel.com/docs/5.4/eloquent-relationships#relationship-methods-vs-dynamic-properties aber kann nicht scheinen, etwas zu finden, das meine Anforderung entspricht. Danke

Antwort

0

Ihre Beziehungen sind ein bisschen verwirrend. Die Tabellenstruktur besagt, dass items zu departments gehören und item inventories zu items gehören. Ich habe die Beziehung auf Ihrer Tischstruktur basiert und wie Sie Ihr gewünschtes Ergebnis erzielen können. Vielleicht möchten Sie Ihre Beziehung noch einmal überprüfen, um zu überprüfen, wie genau Sie es erreichen möchten. Was die aktuelle Beziehung betrifft, sollten meine Modelle Ihnen eine Idee geben.

class User extends Model 
{ 
    public function department() 
    { 
     return $this->belongsTo('App\Http\Models\Department', 'access_type'); 
    } 
} 

class Department extends Model 
{ 
    public function items() 
    { 
     return $this->hasMany('App\Http\Models\Item'); 
    } 

    public function itemInventory() 
    { 
     return $this->hasManyThrough('App\Http\Models\ItemsInventory', 'App\Http\Models\Item'); 
    } 
} 

class Item extends Model 
{ 
    public function department() 
    { 
     return $this->belongsTo('App\Http\Models\Department'); 
    } 

    public function itemInventory() 
    { 
     return $this->hasMany('App\Http\Models\ItemsInventory'); 
    } 
} 

class ItemsInventory extends Model 
{ 
    public function item() 
    { 
     return $this->belongsTo('App\Http\Models\Item'); 
    } 
} 

Controller-Logik

$department_id = 3; 

$itemInventory = ItemsInventory::whereHas('item', function ($query) use ($department_id) { 
    $query->where('department_id', $department_id); 
})->get(); 

// With user:department relation and department:iteminventory 'hasManyThrough' relation. 

$itemInventory = $user->department()->itemInventory; 
Verwandte Themen