2016-08-01 5 views
0

У меня есть данные о моем PostgreSQL как это:Laravel Сортировать по определенной строке

фона

id | Size 
1 | small 
2 | medium 
3 | large 

искусства

id | name  | background_id 
1 | Shine  | 1 
2 | Sun  | 3 
3 | Mountain | 3 

Я хочу, чтобы получить OrderBy искусства данных фон по его значению с малых (малых, средних, больших) с l aravel eloquent

Art::with([ 'background' => function($background) { 
    $background->oderBy(DB::raw("what is this?")); 
} ])->get(); 

Как это исправить?

FIELD(type, 'S', 'M', 'L', 'XL') 

не работает

ответ

0

Вы можете использовать выражение CASE WHEN вместе с orderByRaw():

$queryOrder = "CASE WHEN Size = 'small' THEN 1 "; 
$queryOrder .= "WHEN Size = 'medium' THEN 2 "; 
$queryOrder .= "ELSE 3 END"; 
Art::with('background') 
->orderByRaw($queryOrder); 
->get(); 
0

Я хотел бы добавить order поле, фон таблицы так ordening может быть изменен, когда новое поле добавлено без изменения кода. Затем, вы можете использовать следующий запрос:

Art::with('background') 
->orderBy('background.order') 
->get(); 
+0

Пришло SQLSTATE показать ошибки [42P01]: Undefined таблица: 7 ОШИБКА: отсутствует FROM-п запись для таблицы –

+0

Вы установите '$ table' недвижимость в вашем' Art 'модель? – Jerodev