2016-12-01 2 views
3

Ich habe Artikel und Tag Modelle mit entsprechenden Funktionen in den einzelnen Dateien:Laravel Überschneidung von Modelldaten

Article.php:

public function tags() 
    { 
     return $this->belongsToMany('App\Tag')->withTimestamps(); 
    } 

Tag.php:

public function articles() 
    { 
     return $this->belongsToMany('App\Article'); 
    } 

auf Blade-Ansicht Ich kann auf Artikel mit einem entsprechenden Tag zugreifen, indem ich

@foreach($tag->articles as $article) 
    ... 
@endforeach 
aufrufen

Von oben kann ich auf eine Anzahl von Artikeln für ein einzelnes Tag zugreifen. Wie können wir Artikel mit mehreren Tags filtern, sagen wir nur Artikel, die sowohl tag1 als auch tag2 in einem Tag-Modell haben?

Antwort

2

Dies ist native way zu tun, was Sie wollen:

$tags = ['tag1', 'tag2']; 
$articles = Article::whereHas('tags', function ($query) use ($tags) { 
    $query->whereIn('tag', $tags); 
})->get(); 

Wenn Sie möchten, können Sie dynamische Abfrage Bereiche verwenden, um es besser lesbar leicht zu machen:

// Article.php 

public function scopeTagged($query, $tags) 
{ 
    $query->whereHas('tags', function ($q) use ($tags) { 
     $q->whereIn('tag', (array)$tags); 
    }); 
} 

diese Weise können Sie tun könnte dies bei der Abfrage von Artikeln:

Article::tagged('tag1')->get(); 
Article::tagged(['tag1', 'tag2'])->get(); 
Verwandte Themen