2016-11-04 67 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表格。但是那產生了和以前一樣的結果。 –