2017-10-10 4 views
0

Das Ziel dieser Abfrage ist es, alle Stories zu finden, die einen Image Type mit dem Namen "email_small" haben. Nicht alle Geschichten haben Bilder.Laravel Eloquent Unterabfrage mit 3 Tabellen

Es gibt drei Tabellen/Modelle beteiligt: ​​Storys, storyimage und imagetypes

Eine Geschichte Bilder viel Geschichte

/* Story model */ 
public function storyImages() 
{ 
    return $this->hasMany(StoryImage::class); 
} 

Während eine Geschichte Bild hat einen Bildtyp

/* Storyimage model */ 
public function imgtype() 
{ 
    return $this->belongsTo('App\Imagetype','imagetype_id'); 
} 
hat

Ich kann zum zweiten Schritt der Auswahl aller Geschichten mit einem Bild, aber ich bin in der Unterabfrage verloren

$stories = Story::whereHas('storyImages', function($query){ 
       $query->where($query->imgtype()->name, '=', 'email_small'); 
      }) 
      ->->get(); 

Antwort

1

Warum können Sie nicht zwei Abfragen verwenden? Wählen Sie zunächst ID von imgType mit dem Namen „email_small“ und dann diese ID überprüfen:

$id = Imagetype::where('name', 'email_small')->first()->id; 
$stories = Story::whereHas('storyImages', function($q) use ($id) { 
    $q->where('imagetype_id', $id); 
})->get(); 

Ich bin sicher, dass selbst wenn Sie alles in einer Funktion Laravel schreiben noch wenige Anfragen nennen.

+0

Ah richtig, das ist wahrscheinlich einfacher. Ich überlegte mir diesen Gedanken. – Ravioli87

Verwandte Themen