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.3Join将非常简单,可以解决您的问题
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')解决这个问题->带('assetcategory')->get();我还尝试先加载assetcategories表。但结果和以前一样。