我在laravel模型中添加了访问器和mutator。
public function getAmountAttribute($amount)
{
return ($amount) / 100;
}
public function setAmountAttribute($amount)
{
$this->attributes['amount'] = $amount * 100;
}
这些对我来说很好。我在一个地方遇到问题: 问题是我想在我的控制器中为金额字段应用聚合函数。但访问者无法正常工作。
Model::with(['xxx'])->where('parent_id', $id)->sum('amount')
我检查了$ id的价值。它给了我一个金额字段的总和,其中parent_id等于$ id。潜水后应该给出结果100。
提前致谢。
答案 0 :(得分:0)
Accessors和mutators允许您在何时格式化Eloquent属性 从模型中检索它们或设置它们的值。
...而不是在查询表格时。
Model::with(['xxx'])
->addSelect(DB::raw('SUM(`table`.amount/100) as sum_of_amounts'))
->where('parent_id', $id)
->get();
答案 1 :(得分:0)
只有当您从结果中访问属性时才调用访问器/ mutator,但它在查询中不起作用,因此您无法执行此操作,但作为替代方法,您可以使用Laravel的Collection::sum()方法例如:
$collection = Model::with(['xxx'])->where('parent_id', $id)->get();
$someOfAmount = $collection->sum('amount');
请确保您已在使用$appends
的{{1}}中创建了受保护的Model
媒体资源,其中包含以下内容:
protected $appends = ['amount'];
注意:我不确定是否需要此$appends
,但您可以尝试一下。