2015-11-19 43 views
0

我想弄清楚获取给定模型的索引的最佳方式是什么。Laravel雄辩:模型实例的记录记录

场景:视频列表,属于特定标题。标题可以有一个或多个视频。当在给定的视频页面上使用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模型上使用单个语句是否可能 - 任何人都遇到过类似的问题?

UPDATE /解决方案

一些挖掘和帮助@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

我不认为这是一个Laravel的具体问题。您有一个结果集,其排序由您的特定条件定义。当您在详细信息页面上时,结果集丢失。你只有详细的记录。

因此,例如,您可能想要缓存每个视频在列表中的位置。