2017-08-14 3 views
0

ich brauche zwei machen schließt sich aber mit vielen conditionals wo, ich habe diesesMehrere Joins Laravel

$matchThese = [ 'suspended' => 0, 'status' => 1, 'approved' => 1 ]; 

    $matchOther = [ 'status' => 1, 'approved' => 0 ]; 

    $deals = ListsDeals::where($matchThese)->where('stock', '>', 0)->orwhere($matchOther)->whereDate('end_date', '>', date('Y-m-d'))->limit(4)->offset(0)->orderBy('start_date')->get(); 

    $deals_lists = DB::table('deals') 
       ->join('list_has_deals', 'deals.id', '=', 'list_has_deals.deal_id' ) 
       ->join('lists', 'list_has_deals.list_id', '=', 'lists.id') 
       ->paginate(10); 

ich eine einmalige Abfrage mit, dass zwei Vars benötigen, wählen Sie alle Angebote mit den ‚WHERES‘ im ersten var und später die Joins machen, Grüße.

Antwort

2

denke ich, dass der Trick tun könnte:

$query = ListsDeals::where($matchThese)->where('stock', '>', 0)->orwhere($matchOther)->whereDate('end_date', '>', date('Y-m-d'))->limit(4)->offset(0)->orderBy('start_date'); 

$results = $query->join('list_has_deals', 'deals.id', '=', 'list_has_deals.deal_id' ) 
      ->join('lists', 'list_has_deals.list_id', '=', 'lists.id') 
      ->paginate(10); 
+0

ich etwas mehr Code hinzufügen, die ich SQLSTATE geben Fehler [23000]: Integrität Einschränkungsverletzung: 1052 Column 'ausgesetzt' in where-Klausel ist nicht eindeutig (SQL: wähle count (*) als Aggregat aus 'deals' innerem Join' list_has_deals' auf 'deals'.id' =' list_has_deals'.'deal_id' innerer Join 'lists' auf' list_has_deals'.'list_id' = 'listet auf '.'id' wo (" suspended "= 0 und" status "= 1 und" approved "= 1) und" stock "> 0 oder (" status "= 1 und" approved "= 0) und date (' end_date ')> 2017-08-14) –

+0

Wie Sie Joins in der Abfrage machen, müssen Sie Eloquent sagen, in welcher Tabelle die Auswahl mit der Punktsyntax: zB -> wo ('table.suspended', '=', 'irgendwas') –

+0

Das funktioniert sehr gut, danke: D –