Laravel 4 - SortBy关系字段


Laravel 4 - SortBy relation field

这些是相关的模型:

任务:

public function resolution() {
    return $this->hasOne('Resolution');
}

的决议:

protected $primaryKey = 'task_id';
public $incrementing = false;
public function task() {
    return $this->belongsTo('Task');
}
因此,我有以下代码:

$tasks = Task::with(array(
    '... some relations ...'
))->whereHas('status', function($q) use($include) {
    $q->whereIn('slug', $include);
})->get()->sortByDesc(function($task) {
    return ($task->resolution->end ? $task->resolution->end : Carbon::now()->toDateTimeString());
});

这将返回我想要的结果集合,并具有正确的顺序,但是排序发生在检索到所有行之后。

我需要的是在检索数据之前,根据关系resolution(如上所示)对结果进行排序,然后执行->take(50),因为将有成千上万的行来自该表,该函数将非常慢。

在Eloquent中可以吗?因为我不想让代码在Eloquent和DB:Raw之间分割,这是一个巨大的反模式。

假设您的表名和列名使用合理的默认值,您可以这样做:

$tasks = Task::with(array(
    '... some relations ...'
    ))
    ->whereHas('status', function($q) use($include) {
        $q->whereIn('slug', $include);
    })
    ->join('resolutions', 'tasks.id', '=', 'resolutions.task_id')
    ->orderBy('resolutions.end', 'desc')
    ->get();