Laravel Eloquet:模型实例的记录


Laravel Eloquent : Record of Records for model instance

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

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

希望它能帮助到别人。

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

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