我正嘗試基於相關模型中定義的方法的結果對雄辯ORM調用進行排序。我使用Laravel 5.根據相關模型中方法的結果訂購雄辯ORM結果集
我想要的posts
的列表,包括職位author
,location
,comments
和counts
(這是views
,upvotes
和downvotes
某職位的數量)。我希望列表按hotness
排序,這不是db中的字段(函數的結果)。
在\App\Counts
模型中,我們有一個稱爲hotness()
此方法的方法進行上類似於書籤交易算法的算法的計算[參見以下詳細說明]
我有一個鋒ORM呼叫:
$posts = \App\Post::with('author')
->with('location.city')
->with('comments')
->with('counts')
->paginate(20);
的\App\Counts
模型包含upvotes
領域,downvotes
,views
,以及用於在其他一些變量計算帖子的熱度。
我可以在我的模型這樣的重寫toArray()
方法hotness
值添加到分頁當從counts
模型回來(飛)數組:
public function toArray()
{
$array = parent::toArray();
$array['hotness'] = $this->hotness();
return $array;
}
雖然這是有用的它自己的權利,我無法實現我的目標,這是排序ORM分頁結果每個職位hotness
評級。
有沒有什麼辦法可以實現這個沒有有一個cron遍歷所有帖子並計算hotness
每個帖子每x分鐘?
我非常希望能夠只需添加
->orderBy('hotness')
或
->orderBy('counts.hotness')
,但我有一種感覺,這也許是不可能的。
圍繞如何解決這個問題的任何創意點子?
辣味算法參考
T
是當柱被做了第一柱的日期的網站
x
是上之間的秒數upvotes的數量減去downvotes的數量
y
是-1如果x < 0
,如果x = 0
和如果x > 0
z
是x
絕對值和1
嘗試根據您在'Post'模型下的要求覆蓋'orderBy'函數。 – 2015-02-23 16:37:11