Laravel сортировка с определенным статусом вверху
Есть коллекция кандидата и коллекция запросов. Нужно отсортировать коллекцию кандидатов (candidates) так, чтобы вначале выводились записи со статусом (requests.status) = 11, а потом с остальными статусами c обычной сортировкой (asc, desc).
Ответы (1 шт):
Для этого необходимо использовать ordering
Допустим у вас есть модель CandidatesModel, связанная сущность с таблицей candidates. И связанная с ним модель запросов RequestsModel. Предположим, что они связанны один к одному (1 кандидат на 1 запрос) и по какому то внешнему ключу request_id в таблице candidates;
class CandidatesModel extends Model
{
protected $table = 'candidates';
public function requests()
{
return $this->hasOne( RequestsModel::class, 'id', 'request_id');
}
public static function getTableName() {
return with(new static)->getTable();
}
}
class RequestsModel extends Model
{
protected $table = 'requests';
public static function getTableName() {
return with(new static)->getTable();
}
}
Теперь выбираем кандидатов и сортировкой по статусу
CandidatesModel::all()->with('requests')-> orderBy('requests.status', 'ASC')->get();
где requests - это таблица
Также можно использовать сделать выборку через join
$candidates = CandidatesModel::join(
RequestsModel::getTableName(), CandidatesModel::getTableName().'.request_id', '=', RequestsModel::getTableName().'.id'
)
->orderBy(RequestsModel::getTableName().'.status', 'ASC')->get();