2015-11-19 81 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的具體問題。您有一個結果集,其排序由您的特定條件定義。當您在詳細信息頁面上時,結果集丟失。你只有詳細的記錄。

因此,例如,您可能想要緩存每個視頻在列表中的位置。