2016-11-04 82 views
2

我有一个Asset模型和AssetCategory模型。该asset模型具有功能Laravel:如何订购通过一对一的反比关系

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

assets表中的列idnameassetcategory_id

现在,当我想填充我的资产清单,并根据资产名称排序的话,我可以简单的写

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

但我怎么样根据已填充在资产类别的我输出。我正在使用laravel 5.3

+0

资产类别中有哪些列?以及您想要用于排序的哪一个? – imrealashu

回答

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的正确命名约定。让我知道这是否有效。

+0

感谢您的回复。抱歉,您的查询无效。但是,我能够使用 Asset :: join('assetcategories','assets.assetcategory_id','=','assetcategories.id') - > orderby('assetcategories.name','asc')来解决问题。 - >使用( 'assetcategory') - >获得(); 我也试过急于加载assetcategories表首先。但是那产生了和以前一样的结果。 –

+0

好吧,它可以有非常小的故障,因为我无法在任何地方尝试。很高兴听到你让它工作。 :) – imrealashu

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(); 

assetsasset_categories表名。

+0

感谢您的答复。抱歉,您的查询无效。但是,我能够使用Asset :: join('assetcategories','assets.assetcategory_id','=','assetcategories.id') - > orderby('assetcategories.name','asc')解决问题。 - >与( 'assetcategor Y') - >得到();我也试着急切地加载assetcategories表格。但是那产生了和以前一样的结果。 –