Я пытаюсь выяснить, какой лучший способ получить индекс данной модели в коллекции.Laravel Eloquent: Запись записей для экземпляра модели
Сценарий: список видеороликов, принадлежащих определенному названию. Название может иметь одно или несколько видеороликов. Когда на данной странице видео с моделью 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);
Надеюсь, что это поможет кому-то.