为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel:WhereIn 不提取任何值

Laravel:WhereIn 不提取任何值

PHP
ABOUTYOU 2023-10-15 14:57:13
我正在制作一个小型的副项目,用户可以在其中上传视频/共享视频。我有一个称为标签的功能,在上传屏幕中,您可以选择您的视频所属的标签(有点像 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);


查看完整回答
反对 回复 2023-10-15
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

我会设置一个标签表和一个 tag_video 数据透视表。然后为视频和标签赋予彼此的 ownToMany 关系。

这样你就可以查询标签关系上的视频: $videos = Tag::find(1)->videos

这将提高可读性,并使您更轻松地管理视频上的标签 - 并符合数据库的规范化。


查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信