Laravel:WhereIn 不提取任何值

我正在制作一个小型的副项目,用户可以在其中上传视频/共享视频。我有一个称为标签的功能,在上传屏幕中,您可以选择您的视频所属的标签(有点像 YouTube)。除了一件事之外,这在大多数情况下都可以正常工作。在这个网站上,您可以通过视频标签进行浏览。因此,如果您点击“电影”标签,您就会转到显示带有“电影”标签的所有视频的网页。

它看起来像什么

https://img1.sycdn.imooc.com/652b8d8f0001ed9405770235.jpg

我现在执行此操作的方法是使用简单的Where In 语句。在我的数据库中,我有一个专门用于视频的表,其中一列是您为视频选择的所有标签 ID(采用 json 格式)。一旦您点击特定标签,它将获取该视频标签与您点击的标签 ID 匹配的所有视频。但是当我尝试单击该标签时,它什么也没返回。


控制器代码


public function browse($name) //(This is the name of the tag from web route)

{

    $tag = Tag::wheretag($name)->first();

    

    if ($tag){

    $tagi = array($tag->id);

    $uploads = Video::whereIn('tags', $tagi)->paginate(10);

    return view('browse')->with('uploads', $uploads)->with('name', $name)

    }else{

        return redirect()->back()->with('error', 'That tag does not exists');

    }

}

网络路线


Route::get('/browse/{name}', 'Controller@browse')->name('Browse');

出于某种原因,这让我感到困惑,尽管我认为这应该很容易实现。如果还有其他方法可以做到这一点,请告诉!预先感谢您的任何建议!


ABOUTYOU
浏览 129回答 2
2回答

回首忆惘然

我有一个专门用于视频的表,其中一列是您为视频选择的所有标签 ID(采用 json 格式)。WhereIn 不适用于 json 字段。要查询您需要的 json 字段whereJsonContains。$uploads = Video::whereJsonContains('tags', $tagi)->paginate(10);

江户川乱折腾

我会设置一个标签表和一个 tag_video 数据透视表。然后为视频和标签赋予彼此的 ownToMany 关系。这样你就可以查询标签关系上的视频: $videos = Tag::find(1)->videos这将提高可读性,并使您更轻松地管理视频上的标签 - 并符合数据库的规范化。
打开App,查看更多内容
随时随地看视频慕课网APP