我正在制作一个小型的副项目,用户可以在其中上传视频/共享视频。我有一个称为标签的功能,在上传屏幕中,您可以选择您的视频所属的标签(有点像 YouTube)。除了一件事之外,这在大多数情况下都可以正常工作。在这个网站上,您可以通过视频标签进行浏览。因此,如果您点击“电影”标签,您就会转到显示带有“电影”标签的所有视频的网页。它看起来像什么我现在执行此操作的方法是使用简单的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');出于某种原因,这让我感到困惑,尽管我认为这应该很容易实现。如果还有其他方法可以做到这一点,请告诉!预先感谢您的任何建议!
2 回答

回首忆惘然
TA贡献1847条经验 获得超11个赞
我有一个专门用于视频的表,其中一列是您为视频选择的所有标签 ID(采用 json 格式)。
WhereIn 不适用于 json 字段。要查询您需要的 json 字段whereJsonContains
。
$uploads = Video::whereJsonContains('tags', $tagi)->paginate(10);

江户川乱折腾
TA贡献1851条经验 获得超5个赞
我会设置一个标签表和一个 tag_video 数据透视表。然后为视频和标签赋予彼此的 ownToMany 关系。
这样你就可以查询标签关系上的视频: $videos = Tag::find(1)->videos
这将提高可读性,并使您更轻松地管理视频上的标签 - 并符合数据库的规范化。
- 2 回答
- 0 关注
- 128 浏览
添加回答
举报
0/150
提交
取消