You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel查询实现统计指定演员参演电影中出现次数最多的分类

正确实现代码

方案1:集合处理(逻辑简单易维护,适合数据量较小场景)

$src = ["Leonardo", "DiCaprio"];

// 查询该演员参演的所有电影,预加载分类关联
$films = Film::with('category')
    ->whereHas('actor', function($q) use ($src) {
        $q->where('first_name', $src[0])
          ->where('last_name', $src[1]);
    })->get();

// 统计分类出现次数,取出现频次最高的分类
$mostUsedCategory = $films->pluck('category')
    ->flatten()
    ->countBy('name')
    ->sortDesc()
    ->keys()
    ->first();

方案2:SQL直接查询(性能更高,适合大数据量场景)

$src = ["Leonardo", "DiCaprio"];

$mostUsedCategory = Category::selectRaw('category.*, COUNT(film.film_id) as film_count')
    ->join('film_category', 'category.category_id', '=', 'film_category.category_id')
    ->join('film', 'film_category.film_id', '=', 'film.film_id')
    ->join('film_actor', 'film.film_id', '=', 'film_actor.film_id')
    ->join('actor', 'film_actor.actor_id', '=', 'actor.actor_id')
    ->where('actor.first_name', $src[0])
    ->where('actor.last_name', $src[1])
    ->groupBy('category.category_id')
    ->orderBy('film_count', 'desc')
    ->first();

注意事项

  • 原代码中的whereHas仅用于筛选满足关联条件的模型,内部的分组、排序逻辑不会生效,无法实现统计需求
  • 你的模型类名均为小写,不符合Laravel命名规范,建议调整为大写开头(Film、Actor、Category),避免自动加载报错
  • 若存在多个分类出现次数并列第一的情况,将first()改为get()即可返回所有并列最高的分类

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:24:00