2017-05-15 5 views
0

私はここで問題は解決していません。 私はLaravelでビジネスをしているオファーを数え、ビジネスIDとビジネス名の合計オファーを表示する必要があるクエリを作成しようとしています。ここでLaravelのクエリをカウントします

$business_offers = DB::table('offers') 
     ->join('businesses', 'offers.id_business', '=', 'businesses.id') 
     ->select(['businesses.id', 'businesses.name', DB::raw('count(offers.id) as total_offers')]) 
     ->orderby('total_offers', 'DESC') 
     ->get(); 

しかし、この方法では機能しません。私もmysqlでクエリを実行しましたが、Laravelでクエリを統合することはできません。事前

答えて

0

文字通り、それを読んで、以下のようなものがうまくいくかもしれない:

$business_offers = DB::table('businesses bu') 
    ->select(['bu.id', DB::raw("(SELECT count(of.id) from offers of where of.id_business = bu.id)") ,'bu.name']) 
    ->orderBy('total_offers', 'DESC') 
    ->get(); 

もう少し効率的(多分)にしたいなら:

$business_offers = DB::table('offers') 
    ->join('businesses', 'offers.id_business', '=', 'businesses.id') 
    ->select(['businesses.id', DB::raw("COUNT(1) as total_offers"),'businesses.name']) 
    ->groupBy("businesses.id","businesses.name") 
    ->orderBy('total_offers', 'DESC') 
    ->get(); 
0

SELECT bu.id,(SELECT count(of.id) from offers of where of.id_business = bu.id) 
as total_offers, bu.`name` from businesses bu ORDER BY total_offers DESC 

おかげであなたが設定したモデルと関係を持っている場合、それは同じように簡単でなければなりません:Laravel documentationから

$businesses = Business::withCount(['offers'])->get; 

foreach ($businesses as $business) { 
    echo $business->offers_count; 
} 

あなたがしたい場合あなたが実際にそれらをロードする なしの関係からの結果の数を数えるためにあなたはウィットを使用するかもしれませんhCountメソッドは、 結果のモデルに{relation} _countカラムを配置します。

あなたのビジネスモデルに必要なのは、次のとおりです。

class Business extends Model 
{ 
    /** 
    * Get all of the offers for the business. 
    */ 
    public function offers() 
    { 
     return $this->hasMany('App\Offer'); 
    } 
} 

とオファーのモデルで:

class Offer extends Model 
{ 
    /** 
    * Get the business for the current offer. 
    */ 
    public function business() 
    { 
     return $this->belongsTo('App\Business', 'business_id'); 

    } 
} 
+0

いいえ、関係が設定されていないので、私は質問に投稿したフォームとしてそれを行う必要があります。 – User154584

+0

私はリレーションシップの基本を使って返信を編集しました。私は非常に私の答えにリンクされているドキュメントを読むことをお勧めします。 –

+0

私はあなたの答えを高く評価していますが、プロジェクトが生きているので、私はそれを仲間に投稿する方法が必要です。 – User154584

関連する問題