我有两个模型频道和节目。关系是:一个频道有很多节目。
现在我打算在我的视图中显示特定频道有多少节目。
所以我想出了以下SQL来获取相关数据。
SELECT channels.channel_id, channels.name, num_of_programs
FROM channels
LEFT JOIN
(
SELECT p.channel_id cid, COUNT(*) num_of_programs
FROM programs p, channels c
WHERE p.channel_id = c.channel_id
GROUP BY p.channel_id
) v
ON channels.channel_id = v.cid;
如何在Laravel Eloquent中编写此查询?
顺便说一句,是否有更好,更高效的SQL来完成我的任务?
提前谢谢!
答案 0 :(得分:1)
有很多可能性。那是一个:
DB::table('channels')
->join('programs', 'channels.id', '=', 'programs.channel_id')
->select('channels.id', 'channles.name', DB::raw('count(programs.id) as num_of_programs'))
->groupBy('channels.id', 'channels.name')
->get();
我希望它适合你。
答案 1 :(得分:1)
你可以通过join和group by来实现这个目标,而且我对Laravel Eloquent并不熟悉。 你可以试试这个
SELECT c.channel_id,c.name,COUNT(p.program_id)
FROM channels c
LEFT JOIN programs p ON p.channel_id = c.channel_id
GROUP BY p.channel_id;