2015-11-19 2 views
0

Я пытаюсь выяснить, какой лучший способ получить индекс данной модели в коллекции.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); 

Надеюсь, что это поможет кому-то.

ответ

0

Я не думаю, что это вопрос, связанный с Laravel. У вас есть результирующий набор, порядок которого определяется вашими конкретными условиями. Когда вы находитесь на странице сведений, ваш результирующий набор потерян. У вас есть только подробный отчет.

Итак, вы можете захотеть, например, кэшировать положение каждого видео в списке.

Смежные вопросы