2017-08-01 3 views
1

私のAPIから必要なものを得るための別の方法を考えようとしています。Laravelモデルのメソッドで関係を注文する

$team = Team::with('users')->find($id); 

チームモデル上のユーザの関係である:

public function users() 
{ 
    return $this->belongsToMany(
     'App\User', 'team_users', 'team_id', 'user_id' 
    )->withPivot('role')->orderBy('current_active_team', 'DESC'); 
} 

私は現在、上のフィールドでこれを注文しています私はLaravelスパークを使用していますとの線に沿って、クエリがいる

ユーザーテーブルのメソッドを使用して注文する必要があります。

public function queueLength() 
{ 
    // returns an integer for the users queue length 
} 

T Oこのデータを返す私は現在、私のクエリの下にこれを追加してい:

foreach ($team->users as $user) { 
    $user->queueLength = $user->queueLength(); 
} 

は、私が彼らのqueueLengthで$ team->ユーザーを注文することができます方法はありますか?

+0

キューの長さを属性としてモデルに追加しますか? [この質問を見る](https://stackoverflow.com/questions/17232714/add-a-custom-attribute-to-a-laravel-eloquent-model-on-load) – milo526

+0

queueLengthはどのようになっていますか?他のデータベーステーブルからのものであれば、それを使って順序付けを可能にするために結合を行うことができます。 –

答えて

0

1つの解決策は、使用コレクションsortByです。

まず、queueLengthを属性として作成します。

public function getQueueLengthAttribute() 
{ 
    // returns an integer for the users queue length 
} 

その後PS

$team->users->sortBy('queueLength'); 

コレクションSORTBY

を使用する:あなたが大量のデータを持っているか、ページネーションを使用している場合、これは良いアイデアではありません。

+0

素晴らしい感謝! :) – Lovelock

関連する問題