2

我有一个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

4

3 回答 3

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

于 2016-11-04T11:26:24.167 回答
0

让我们假设您的模型中有这样的功能

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

现在在您的控制器中,您可以获取资产名称

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

这样您就可以获取资产类别

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

让我知道这个是否奏效。

于 2016-11-04T12:44:33.940 回答
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作为表名。

于 2016-11-05T03:52:49.353 回答