我有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
答案 0 :(得分:0)
加入很简单,可以解决您的问题。
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的正确命名约定。让我知道这是否有效。
答案 1 :(得分:0)
假设您在模型中有这样的函数
public function assetCategory()
{
return $this->belongsTo('App\AssetCategory');
}
现在在您的控制器中,您可以获取资产名称
$assets = Asset::orderBy('name' , 'asc')->get();
这样您就可以获取资产类别
$assets->assetCategory()->orderBy('id', 'asc')->get();
让我知道这是否有效。
答案 2 :(得分: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
作为表名。