Laravel通过模型上的方法对关系进行排序

时间:2017-08-01 13:32:47

标签: php laravel

尝试考虑从API获取我需要的其他方法。

我正在使用Laravel Spark并且有一个查询:

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

Team模型的用户关系是:

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

我目前通过users表上的字段对此进行排序,但我还想通过Users模型上的方法进行排序:

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

要返回此数据,我目前正在我的查询中添加此内容:

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

我可以通过queueLength订购$ team->用户吗?

1 个答案:

答案 0 :(得分:0)

一个解决方案是使用集合sortBy

首先将queueLength作为属性。

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

然后使用collection sortBy

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

PS:如果您拥有大量数据或使用分页,这不是一个好主意。