2017-01-26 64 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