控制器中的laravel访问器?

时间:2016-07-11 13:17:46

标签: php laravel-5 accessor mutators

我在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。

提前致谢。

2 个答案:

答案 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,但您可以尝试一下。