【问题标题】:Getting all item from choosen tag with Laravel使用 Laravel 从选择的标签中获取所有项目
【发布时间】:2017-01-26 07:01:13
【问题描述】:

我有一页显示图像+添加到图像的标签。我想让标签可以点击,当我点击某个标签来打开所有有这个标签的图片时。

我有 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}', 'ImageController@byTag')->name('bytag');

ImageController中的byTag()函数

public function byTag($tag_id){

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

当我点击按钮时发生的情况是,我在视图上获得了标签bytag,而不是带有此标签的图像。

我在这里想念什么?

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    您应该使用Image 模型和whereHas() 方法加载图像:

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

    【讨论】:

    • 有趣。我还是 Laravel 关系的初学者,不知道 whereHas。非常感谢。这非常有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2011-04-04
    • 2014-03-19
    相关资源
    最近更新 更多