我有 2 个表 - 视频和类别。 还有一个数据透视表 Video_Category,因为类别可以包含更多视频。
我尝试从数据透视表中获取所有 ID:
$allcategoryvideos = CategoryVideo::where('category_id', $category_id)->pluck('video_id');
但是我想用 where('featured', 1) 过滤所有视频(视频表),所以我使用 foreach 并尝试获取所有视频:
$featured = [];
foreach ($allcategoryvideos as $video){
array_push($featured, [
$video = Video::where('id', $video)->whereNotNull('featured')->first(),
]);
}
return $featured;
并且在模型 CategoryVideo 枢轴处具有以下关系:
public function videofeatured() {
return $this->hasOne(Video::class, 'id', 'video_id')->where('featured', 1);
}
所以,它几乎可以工作,但是如果第一行的 pluck() 有 2 个以上记录并且所有记录都没有特色,它会在数组中给我空索引,如下所示:
[[{"id":1,"created_at":"2022-07-24T14:20:30.000000Z","updated_at":"2022-07-24T14:20:34.000000Z","name":"Video 1","slug":"video","description":"123","video_link":"123","mp3_link":"123","image_url":"123","minutes":10,"sort_id":null,"featured":1,"is_visible":1}],[null]]
我需要帮助来解决此问题或创建一些查询,获取属于特定类别的所有视频,并过滤特定视频(如果其有特色)并将其粘贴到没有空索引的数组中。 非常感谢您的帮助。
你可以做出这个逻辑
Video::where('featured', 1)->whereHas('categories', function ($q)use($category_id) {
$q->where('categories.id', $category_id);
})->get();
在视频模型中你应该这样做
public function categories() {
return $this->belongsToMany(Category::class, 'category_video');
}
您也可以像这样与数据透视表建立关系
public function category_video() {
return $this->hasMany(CategoryVideo::class);
}
并进行更多预定义查询
Video::where('featured', 1)->whereHas('category_video', function ($q)use($category_id) {
$q->where('category_video.category_id', $category_id);
})->get();