2017-06-27 13 views
0

私は自分自身で解決策を見つけることができなかったし、グーグルで解決することもできなかった。laravelのクエリを減らす

私のダッシュボードビューでは、$plans = Plan::all()を実行するだけで支払い計画を表示し、それを表示に戻します。そこには何もない。しかし、私の実際のダッシュボードビューでは、実行されたトランザクションから合計金額をドルで表示したいと考えています。だから、私の見解で、私は次の(取り除か例)を行います。私のモデルから、次の方法を使用している

@foreach($plans as $plan) 
    {{ $plan->paidAmount() }} 
@endforeach 

基本的にはちょうどに、すべての関連取引の総量をつかむ
private function paidAmount() 
{ 
    return $this->transactions->sum('amount'); 
} 

そのプランを作成し、ページに表示します。ただし、これは私の計画のそれぞれに対して新しいクエリを生成します。 5つのプランがあるとします。表示する必要がある各金額に対して5つの追加クエリが生成されます。

private function paidAmount() 
{ 
    return $this->amount - $this->paidAmount(); 
} 

さらに5つのクエリを生成します。

同じことが、私が表示したい残量のために行きます。だから私はいくつかの情報を表示するシンプルなテーブルのために、11個の質問が実行されています。

元のクエリにpaidAmountremainingAmountを含めることはできますか?私は方法があるべきであることを知っている、私はまだそれを見つけることができませんでした。線に沿っだから何か:あなたはこのように合計

を計算するために、このようなあなたのメインクエリ内のサブクエリを使用することができます

$plans = Plan::with('paidAmount')->get(); 

答えて

2

-

$plans = Plan::all('*', DB::RAW("(SELECT SUM(amount) FROM transactions WHERE plan_id=plans.id) as amount")); 

あなたが既に持っているでしょう。この方法ビューでレンダリングするときの合計

+0

ありがとう、私は生のクエリについて詳しく知っていなければなりません。これは完全に機能します。 – Hardist

関連する問題