我有一个expenses
表,该表与belongsTo
有Descriptions
关系。我只是想返回使用最多的描述实例。我的想法是,获取最常用的description_id
,然后使用id从数据库获取相应的Description
。到目前为止,我想到了这个:
auth()->user()->expenses()->get()->groupBy('description_id');
因此,这给了我按description_id
分组的结果。不确定我走的路是否正确,但不确定从这里出发。或者,如果有更合适的方法可以做到这一点。任何可以引导我朝正确方向发展的东西都会受到赞赏。
答案 0 :(得分:3)
您可以尝试这种方式:
$userWithExpensesWithMaxDescription = auth()->user()->expenses()->with(['descriptions' => function ($query) {
// subquery to get only max count
$query->select('description_id', DB::raw('count(*) as total'))
->groupBy('description_id')
->orderBy('total', 'DESC')
->first();
}])->get();
我想您在descriptions
模型中有关系Expenses
。
答案 1 :(得分:2)
如果我理解正确,我认为以下方法应该起作用:
DB::table('expenses')
->where('user_id', auth()->user()->id)
->groupBy('description_id')
->orderByRaw('count(*) DESC')
->value('description_id')
->first();
这将返回最受欢迎费用的description_id
。
答案 2 :(得分:2)
假设您在expenses
模型中建立了Description
关系,并且在user
模型中建立了Expense
关系,则可以执行以下操作:
$description = Description::withCount([
'expenses' => function ($query) {
$query->where('user_id', auth()->id());
}])
->orderBy('expenses_count', 'desc')
->first();