所以我有一个数据库列,其内容是这样的数组:
[{"tag_name":"example1"},{"tag_name":"example2"}, {"tag_name":"example3"}]
我要做的是检索带有特定标签的视频。所有视频都有特定的标签,当用户点击其中一个标签时,它会被重定向到一个视图,其中将显示具有相同标签的类似视频。
现在我有以下控制器:
public function search($tag){
$tag = urldecode($tag);
$videos = Video::where('tags', 'LIKE', $tag)->paginate(12);
$settings = Detail::find(1);
$ads = Ad::find(1);
return view('search', ['videos' => $videos, 'settings' => $settings, 'ads' => $ads]);
}
我有以下观点(search.blade.php):
@foreach($videos as $video)
<div class="col-lg-4 col-xs-12">
<div class="row justify-content-center">
<a href="{{ route('videos.videopage', $video->id) }}"><img class="articleImg" src="{{$video->imgurl}}"></a>
</div>
<div>
<p class="float-left">{{$title = substr($video->title, 0, 30) . " ..."}}</p>
<small class="duration float-right">{{$video->duration}}</small>
<div class="progress float-right">
<div class="progress-bar bg-success" role="progressbar" style="width: {{$video->rating}}%" aria-valuenow="{{$video->rating}}" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
</div>
@endforeach
问题是,现在,我的视图中没有显示视频,即使很难,我也没有任何错误。是因为列有一个数组数组吗?
答案 0 :(得分:1)
我认为这是因为你的控制器正在返回0个视频,因为标签永远不会匹配。
您使用的是LIKE
语句而未使用%
转义标记变量,因此您希望匹配完全的内容,例如标记,并且因为你有一个标签数组作为一个永远不会发生的列。
您可以实施的一个解决方案是将您的代码更改为以下内容:
public function search($tag){
$tag = urldecode($tag);
$videos = Video::where('tags', 'LIKE', '%'.$tag.'%')->paginate(12);
$settings = Detail::find(1);
$ads = Ad::find(1);
return view('search', ['videos' => $videos, 'settings' => $settings, 'ads' => $ads]);
}
Here您可以阅读有关LIKE运算符的更多信息:D