我有一個一對多的多態關係,就像in documentation所描述的一樣,除了我在投票表中有投票而不是照片和整數投票列。這樣的:Laravel 5.2關於多態關係的查詢範圍
-votes
--id
--vote
--voteable_id
--voteable_type
投票模型具有voteable方法:
public function voteable()
{
return $this->morphTo();
}
但我想有連接(第56頁在這個例子中)票我已經創建了一個VoteableTrait,裏面有模特票()morphMany方法和我試圖去工作的範圍。範圍將添加屬於某個模型的所有選票的總和,並按總和排序父模型。作爲範圍我已經試過:
public function scopeWithVotesTrait($query)
{
return $query->with(['votes' => function($q){
$q->select(\DB::raw("SUM(vote) AS votes"), 'voteable_id')->first();
}]);
}
但有了這個我不能排序依據爲Laravel執行2次不同的查詢,一個是父模型和一個似乎票。頁)結果:: withVotesTrait( - )>第(放票的數組:
{
"id": 1,
"votes": [
{
"votes": "-1",
"voteable_id": 1
}
]
}
其他想法我是執行聯接,而不是 - >與()這樣的:
public function scopeWithVotesTrait($query, $model, $table)
{
return $query->join('votes', function($join) use($model, $table)
{
$join->on('votes.voteable_id', '=', $table . '.id')
->where('votes.voteable_type', '=', $model);
})->select('*', \DB::raw('sum(vote) as votes'))
->orderBy('votes')->groupBy($table . '.id');
}
但是,如果每次使用範圍時都必須手動輸入$ model('App \ ParentModel')和$ table('parent_models'),那麼這種方法就會把它放在特徵中。
那麼有沒有一種方法可以通過我的第一個範圍示例中的票數總和進行有效排序?或者是否有任何可以從Eloquent Model調用的靜態方法返回模型名稱,另一個用於模型表格以使第二個示例工作?
任何其他想法如何使範圍,將所有投票的總和附加到父模型和它的順序?