2016-07-11 3 views
0

Я добавляю аксессоров и мутаторов в мою модель laravel.laravel accessors в контроллере?

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

Аксессоры и мутаторы позволяют вам форматировать атрибуты Eloquent, когда извлекает их из модели или устанавливает их значение.

... нет при обращении к таблице.

Model::with(['xxx']) 
    ->addSelect(DB::raw('SUM(`table`.amount/100) as sum_of_amounts')) 
    ->where('parent_id', $id) 
    ->get(); 
0

аксессор/мутатор вызывается только при доступе к собственности от результата, но он не работает в запросе, так что вы не можете сделать это, но в качестве альтернативы, вы можете использовать метод Collection::sum() Laravel для пример:

$collection = Model::with(['xxx'])->where('parent_id', $id)->get(); 
$someOfAmount = $collection->sum('amount'); 

Убедитесь, что вы создали защищенный $appends свойство в вашем Model в использовании, где она имеет следующие:

protected $appends = ['amount']; 

Примечание: Я не уверен, требуется ли это $appends, но вы можете попробовать.

+1

В соответствии с моим мышлением $ appends следует использовать, когда у нас нет поля в базе данных и мы хотим включить его в нашу коллекцию. [Использование аксессуаров в красноречивом] (http://laraveldaily.com/why-use-appends-with-accessors-in-eloquent/) Но это хорошая идея использовать таким образом в соответствии с вашим ответом. благодаря –

Смежные вопросы