2016-08-05 22 views
1

Ich habe zwei Tabellen: Users und Images.Wie Bedingung in Verbindungstabellen hinzufügen?

So kann ein Benutzer einige Bilder haben.

Für diese Beziehung habe ich zusätzliche Funktion in Modell User:

public function images() 
{ 
    return $this->hasMany('App\Images', 'idElement', 'id'); 
} 

Und Controller ich habe:

$users = Users::where('id', $id)->with("images")->get(); 

Wie kann ich für images table in Controller zusätzliche Bedingung hinzufügen, die "where images.type = 1" sein?

Jetzt sind diese Tabellen nur durch Primärschlüssel verbunden, aber ich muss noch eine neue Bedingung einstellen.

+0

Hinweis: Sie haben das Modell 'Benutzer', aber Sie greifen auf' Benutzer :: 'zu. Modellnamen sollten Singular sein (Präferenz sowieso) –

Antwort

3

Sie können Ihre Bilder mit Callback-Funktion filtern, versuchen Sie dies:

$users = Users::where('id', $id)->with(["images" => function ($query){ 
    $query->where('type', 1); 
}])->get(); 
+0

Diese Bedingung wird für die Bildtabelle angewendet? – Dev

+1

@Dev ja, für weitere Informationen überprüfen Sie dies: https://laravel.com/docs/5.1/eloquent-relationships#eager-loading –

+1

@Jose ja, es wird. Hier würden Sie eine Abfrage für die Bilder ausführen, die sich auf den Benutzer beziehen, und nur Bilder abrufen, bei denen "type = 1" ist. Es ist ein Filter der Art. –

2

Für so etwas, wo man sich eine Teilmenge von Bildern Umfang wollen auf der Grundlage ihrer Art, Sie eine andere Methode hinzufügen können, so genannte wie public function scopedImages() und sie als solche definieren:

public function scopedImages() { 
    return $this->hasMany('App\Images', 'idElement', 'id')->where("images.type", "=", 1); 
} 

In Ihrem Controller, würden Sie diese Funktion, wie Sie den gleichen Zugang würde die images() Funktion auf User:

$users = Users::where('id', $id)->with(["scopedImages"])->get(); 

Halten Sie die Funktion images() auch, wenn Sie also alle Bilder zu einem User angebracht finden müssen, aber das Hinzufügen von zusätzlichen Funktionen wie das gibt Ihnen Flexibilität auf, was Sie zurückkehren wollen und wann.

+0

Wie Param in Funktion übergeben? – Dev