Laravel Eloquent:模型实例的记录记录

时间:2015-11-19 18:55:37

标签: php laravel eloquent laravel-5.1 query-builder

我正在试图找出在集合中获取给定模型索引的最佳方法。

场景:属于特定标题的视频列表。标题可以包含一个或多个视频。在手边有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);

希望它会对某人有所帮助。

1 个答案:

答案 0 :(得分:0)

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

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

相关问题