2017-09-15 16 views
2

2つの(できればより多くの)クエリの結果を結合/結合しようとしています。そして、それを選択的にいくつかの列/プロパティを選択してテーブル内のブレードビューに表示します。私はLaravel、eloquent/querybuilder(私は純粋なSQLでそれを行うことができましたが、それはもちろんポイントではありません)でしようとしています。おそらく複数のサーバでマルチテーブルのデータベースとテーブルを使用します。ポイントへの :ここでのコードのビットです:PHP、Laravelは2つのクエリの結果を結合し、html/bladeテーブルに選択的に表示します

$query1 = Documents::join('warehouses', 'analyticsData.documents.warehouse', '=', 'analyticsData.warehouses.id') 
     ->selectRaw(
      ' analyticsData.warehouses.name name, 
     analyticsData.documents.warehouse number, 
     SUM(analyticsData.documents.value) takings1' 
     ) 
     ->whereIn('analyticsData.documents.type', [1, 4, 5]) 
     ->whereDate('date', '>=', '2016-09-05') 
     ->whereDate('date', '<=', '2016-09-10') 
     ->limit('5000') 
     ->groupBy('name1') 
     ->get(); 

    $query2 = Documents::join('warehouses', 'analyticsData.documents.warehouse', '=', 'analyticsData.warehouses.id') 
     ->selectRaw(
      ' analyticsData.warehouses.name name, 
     analyticsData.documents.warehouse number, 
     SUM(analyticsData.documents.value) takings2') 

     ->whereIn('analyticsData.documents.type', [1, 4, 5]) 
     ->whereDate('date', '>=', '2017-09-04') 
     ->whereDate('date', '<=', '2017-09-09') 
     ->limit('5000') 
     ->groupBy('name1') 
     ->get(); 

その後、私はブレードで、テーブルに画面上の結果の選択した列を表示するforeachループで。 私は数日間実際にそれを行ってきましたが、array_mergeで配列として結果をマージすることを試みましたが、もう一方の配列の末尾に配列を追加するだけです。 SQLで '(右)結合'に相当するものが必要です。 '名前'と '番号'の列は同じです。 まったくコレクションや配列のメソッドとその組み合わせは動作していないようです。 私はどんな助けにも大変感謝しています。

PS。また、selectRawを使用せずに特定のクエリの列から値の合計を得ることができない場合は、誰もが知っていると思います。

+0

あなたはそれを組み合わせることができますか?どうした? –

+0

配列(配列に変換する場合)が不均一なため、私は 'combine'を使用できません。私は正確に同等のSQL結合を必要とします。または、他の列の隣にある列を適切に表示する方法です。 –

+0

明らかにするには:array_combine():両方のパラメータは同じ数の要素を持つ必要があります –

答えて

0

私はクエリビルダーで複数の結合を行いました。ここ

私のコードは次のとおりです。

$result = DB::table('sub_categories')->join('categories', 'sub_categories.category_id', '=', 'categories.id') 
     ->join('main_categories', 'main_categories.id', '=', 'categories.main_category_id') 
     ->where([['main_categories.text', '=', $mainCategory], ['categories.text', '=', $category], ['sub_categories.text', '=', $subCategory]]) 
     ->select('sub_categories.id as subject_id')->get(); 

と、この1は多分役に立つこと:

$result = DB::table('users')->where([['users.user_id', $userId], ['ad_is_verified', true]]) 
     ->join('ads', 'ads.user_id', '=', 'users.user_id') 
     ->where('ads.ad_id', '=', $addId)->get(); 
+0

ありがとうございますが、私の究極の目標は、テーブルのペアのカップルに参加し、それらの結合に参加することですはっきりと)。 1つのテーブルと複数の他のテーブルとの複数の結合は、私が探しているものではありません。私は、いくつかのクエリの結果セットに参加する方法を見つける必要があります。または、マージされた配列の結果を選択的にテーブルに表示する方法を見つけることができます。実際に、不均一な/不等な配列に対して '結合'を実行できるのであれば、それを解決すると思います。しかし明らかに、「結合」は、要素の数が異なる配列では実行できません。結合の代わりに –

+0

を使用する場合は、あなたのケースに合併を使用する必要があります。 – Amin

+0

これは、私が心に留めている解決策ではありません。この場合、「組合」が機能するかどうかはわかりません。それにもかかわらず、私のコードに組合を適用することはできませんが、Expected \ Closure | \ Illuminate \ Database \ Query \ Builderは\ App \ ModelsAnalyticsData \ Documents \ Illuminate \ Database \ Eloquent \ Collection | \ Illuminate \ Database \ Query \ Builder [] | \ Illuminate \ Support \ Collectionにあります。 呼び出しパラメータ型は宣言された型と互換性がありません。 –

関連する問題