Laravel: Как сделать заказ по обратным отношениям «один к одному»

у меня есть Asset модель и AssetCategory модель. asset модель имеет функцию

$this->belongsTo('App\AssetCategory' ); //inverse one to one

мой assets таблица имеет столбцы id , name , assetcategory_id ,

Теперь, когда я хочу заполнить свой список активов и отсортировать его по названию ресурса, я могу просто написать

$assets = Asset::orderBy('name' , 'asc')->get();

Но как мне отсортировать по категориям активов, которые заполнены в моем выводе. Я использую Laravel 5.3

2

Решение

Присоединиться будет просто и решит вашу проблему.

Asset::select(
'assets.id as asset_id',
'assets.name as asset_name',
'assets.assetcategory_id',
'assetcategories.name as assetcategory_name')
->leftJoin('assetcategories','assetcategories.id','=','assets.assetcategory_id')
->groupBy('asset_id')
->orderBy('assetcategory_name','asc')
->get();

Примечание: я предполагаю, что вы использовали правильное соглашение об именах laravel. Дайте мне знать, если это работает или нет.

0

Другие решения

давайте предположим, что у вас есть такая функция в вашей модели

public function assetCategory()
{
return $this->belongsTo('App\AssetCategory');
}

теперь в вашем контроллере вы можете получить имя актива

$assets = Asset::orderBy('name' , 'asc')->get();

таким образом, вы можете получить категорию активов

$assets->assetCategory()->orderBy('id', 'asc')->get();

Дайте мне знать, если это работает.

0

Вы можете сделать это так …

Asset::join('asset_categories', 'assets.asset_category_id', '=', 'asset_categories.id')
->orderBy('asset_categories.name', 'asc')
->groupBy('assets.id')
->select('assets.*')
->get();

принятие assets а также asset_categories в качестве имен таблиц.

0
По вопросам рекламы [email protected]