Php Laravel:如何按一对一的反向关系排序

Php Laravel:如何按一对一的反向关系排序,php,laravel,laravel-request,Php,Laravel,Laravel Request,我有一个Asset模型和AssetCategory模型。资产模型具有以下功能 $this->belongsTo('App\AssetCategory' ); //inverse one to one 我的assets表中有id、name、assetcategory\u id列 现在,当我想填充我的资产列表并根据资产名称对其排序时,我可以简单地编写 $assets=Asset::orderBy('name','asc')->get() 但如何根据输出中填充的资产类别进行排序。我使用的是l

我有一个
Asset
模型和
AssetCategory
模型。
资产
模型具有以下功能

$this->belongsTo('App\AssetCategory' ); //inverse one to one 
我的
assets
表中有
id
name
assetcategory\u id

现在,当我想填充我的资产列表并根据资产名称对其排序时,我可以简单地编写

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


但如何根据输出中填充的资产类别进行排序。我使用的是laravel 5.3

Join将非常简单,可以解决您的问题

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

假设您的模型中有这样一个函数

public function assetCategory()
{
  return $this->belongsTo('App\AssetCategory');
}
现在,您可以在控制器中获取资产名称

$assets = Asset::orderBy('name' , 'asc')->get();
通过这种方式,您可以获取资产类别

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

让我知道这是否有效。

你可以这样做

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

资产
资产_类别
作为表名。

资产类别中有哪些列?你想用哪一个来分类?谢谢你的回复。抱歉,您的查询不起作用。但是,我能够使用Asset::join('assetcategories','assets.assetcategories_id','=','assetcategories.id')->orderby('assetcategories.name','asc')->with('assetcategories')->get()解决这个问题;我还尝试先加载assetcategories表。但这产生了和以前一样的结果。它可能有非常小的故障,因为我在任何地方都无法尝试。很高兴听到你成功了。:)谢谢你的回复。抱歉,您的查询不起作用。但是,我能够使用Asset::join('assetcategories','assets.assetcategories_id','=','assetcategories.id')->orderby('assetcategories.name','asc')解决这个问题‌​->带('assetcategor‌​y')->get();我还尝试先加载assetcategories表。但结果和以前一样。