2017-01-26 88 views
3

我有一個頁面,我顯示圖像+標籤添加到圖像。我想讓標籤可點擊,當我點擊某個標籤打開所有包含此標籤的圖片時。從Laravel選擇標籤獲取所有項目

我有3個表:images圖片,tags標籤和image_tag分配給圖像的列(image_idtag_id)標籤。我的模型是在變量模型我已經添加了這種關係

public function byTags() {  
    return $this->belongsToMany('App\Image', 'item_tag'); 
} 

我也該加入到我的圖像模型

,但我不知道我是否需要它

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

這是在href鏈接應該加載所有圖片

<a href="{!! url('byTag/' . $tag->id) !!}"> {!! $tag->tag !!} </a> 

這是我的路線

Route::get('byTag/{tag_id}', '[email protected]')->name('bytag'); 

byTag()功能在ImageController

public function byTag($tag_id){ 

    $images = Tag::with('byTags')->whereId($tag_id)->get(); 
    return view('bytag', compact('images'));   
} 

什麼是當我點擊該按鈕出現的情況是,我得到了標籤上的視圖bytag,而不是與此標記的圖像。

我在這裏想念什麼?

回答

3

您應該加載使用Image模型和whereHas()方法圖像:

$images = Image::whereHas('tags', function ($q) use($tag_id) { 
     $q->where('id', $tag_id); 
    })->get(); 
+1

有趣。我仍然是Laravel關係的初學者,並不知道哪裏有。非常感謝。這工作完美。 – user5996816