首页 > 解决方案 > Laravel:WhereIn不提取任何值

问题描述

我正在制作一个项目,用户可以在其中上传视频/分享视频。我有这个称为标签的功能,其中上传屏幕,您可以选择您的视频属于哪些标签(有点像 YouTube)。这在大多数情况下都很好,除了一件事。在这个网站上,您可以通过视频标签进行浏览。因此,如果您单击“电影”标签,您将被发送到显示所有带有“电影”标签的视频的网页。

它看起来像什么

该功能的外观

我现在这样做的方式是使用一个简单的 Where In 语句。在我的数据库中,我有一个专门用于视频的表格,其中一列是您为 json 格式的视频选择的所有标签 ID。单击特定标签后,它将获取视频标签与您单击的标签 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');

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

标签: phplaravel

解决方案


我有一个专门用于视频的表格,其中一列是您为 json 格式的视频选择的所有标签 ID。

WhereIn 不适用于 json 字段。要查询您需要的 json 字段whereJsonContains

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

推荐阅读