我正在试图找出在集合中获取给定模型索引的最佳方法。
场景:属于特定标题的视频列表。标题可以包含一个或多个视频。在手边有Video
模型的给定视频页面上,我想在Video ? of ?
行显示一些内容。
基本上我需要实现的是反映以下原始sql语句:
SELECT `v`.*
(
SELECT COUNT(`id`)
FROM `videos`
WHERE `title_id` = ?
AND `identity` <= `v`.`identity`
) AS `collection_index`
FROM `videos` `v`
WHERE `v`.`id` = ?
identity
只是一些用于对视频进行排序的字段 - 可能是数字,但也可以是01-03
等格式的字符串。在上面collection_index
会存储索引(或在集合中给定记录的相当顺序的位置。
是否可以在Eloquent模型上使用单个语句 - 任何人遇到类似的问题?
更新/解决方案
经过@JarekTkaczyk的一些挖掘和帮助,我成功地找到了一个解决方案 - 对于那些也可能遇到同样问题的人。 这是我的模型使用子查询来实现上述目的。
return Video::select('videos.*')
->selectSub("
SELECT COUNT(v.id)
FROM videos as v
WHERE v.title_id = videos.title_id
AND v.identity <= videos.identity
",
'collection_index'
)
->selectSub("
SELECT COUNT(v.id)
FROM videos as v
WHERE v.title_id = videos.title_id
",
'collection_count'
)
->find(id);
希望它会对某人有所帮助。
答案 0 :(得分:0)
我认为这不是Laravel特有的问题。您有一个结果集,其排序由您的特定条件定义。当您在详细信息页面上时,结果集将丢失。你只有详细的记录。
因此,您可能希望在列表中缓存每个视频的位置,例如。