Как рассчитать общую сумму для указанных c id в laravel? - PullRequest
2 голосов
/ 29 января 2020

У меня есть две таблицы счетов-фактур и invoice_items. Я хочу суммировать сумму для каждого идентификатора счета и отображать его в моем представлении.

Таблица счетов

  • id

таблица invoice_items

  • id

  • invoice_id

  • сумма

Я хочу суммировать столбец суммы для указанного c идентификатора счета. Я новичок в laravel, так как мне сделать это с laravel eloquent.

Ответы [ 3 ]

2 голосов
/ 29 января 2020

Поскольку вы используете один ко многим.

Решение 1:

Вы можете использовать with и groupBy, выглядя так:

$invoice = Invoice::with(['invoice_items' => function($query){
       $query->groupBy('invoice_id')->select('invoice_id', DB::raw('SUM(amount) AS amount_sum'));
}])->get();

Решение 2:

Или вы можете использовать leftjoin и SUM, выглядящие так:

$invoice_query = InvoiceItem::groupBy('invoice_id')->select("invoice_id", DB::raw('SUM(amount) AS amount_sum'));

Invoice::leftjoin(DB::raw("({$invoice_query->toSql()}) AS ii"), 'ii.invoice_id', '=', 'invoices.id')
       ->mergeBindings($invoice_query->getQuery())
       ->select('invoices.*', 'amount_sum')
       ->get();

Решение 3:

Использование accessor : В вашей модели счета-фактуры:

protected $appends = ['amount_sum'];
public function getAmountSumAttribute()
{
    return $this->invoice_items()->where('invoice_id', $this->id)->sum('amount');
}

ТАК, что вы можете просто получить сумму:

Invoice::all()->toJSON();
0 голосов
/ 29 января 2020
Try with this one. I think this works
$result = \DB::table('Invoice')     
    ->join('invoice_items', 'Invoice.id', 
'=','invoice_items.invoice_id')->whereIn('Invoice.id', [1, 2, 3]))->sum('invoice_items.amount');    

if somewhere i am wrong try with exchanging table name.
0 голосов
/ 29 января 2020

Предположим, что в вашей модели Invoice есть отношение этого:

public function invoice_items() [
   return $this->hasMany('App\Invoice_Items', 'invoice_id');
}

В вашем контроллере ваш код должен выглядеть следующим образом.

Получить все счета с их общей суммой элементов счета

$invoices = Invoice::with(['invoice_items' => function($query){
   $query->sum('amount');
}])->get();

return view('invoice', compact('invoices'));

Выбрать спецификацию c счет с общей суммой пунктов счета

$invoice = Invoice::with(['invoice_items' => function($query){
       $query->sum('amount');
}])->find($invoice_id);

return view('invoice', compact('invoices'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...