2017-12-21 8 views
0

Ich habe unter TabellenWie Komplexe Beziehung in einem Laravel mit beredten

Benutzer

id 
name 

Firmen

id 
user_id 
name 

Produktkategorien

id 
company_id 
name 

Produkte

erhalten
id 
product_category_id 
name 

Vertrieb

id 
product_id 
price 
quantity 
total 

Jetzt möchte ich alle Verkaufs-Produkte für bestimmte Benutzer erhalten. Ich habe versucht mit unten Abfrage. Aber wofür kann ich nicht verwenden. Es gilt nicht diesen Filter. Auch möchte ich es von einigen anderen Bereichen wie users.user_name filtern, products.product_name ... etc

$sales = Sale::with(['product'=>function($q) use ($user_id) { 
     $q->with(['product_category' => function($q) use ($user_id) { 
      $q->with(['company'=> function($q) use ($user_id) { 
       $sUserName = Input::get('sUserName'); 
       $q->with(['user'=> function($q) use ($sUserName,$user_id) { 
        $q->where('id', $user_id); 
       }]); 
      }]); 
     }]); 
    }]); 

Ist es möglich, Eloquent für diese Situationen zu benutzen? Oder sollte ich Join-Abfragen verwenden? Bitte berate mich. Danke

+0

Ich schlage vor, Sie zu dem Verkaufstisch eine Benutzer-ID hinzufügen – madalinivascu

+0

Sie haben keine konkrete grundlegende, robuste Datenmodellierung dann, wie Sie erwarten Ergebnis mit dem Werkzeug gewünscht zu haben? – Ben

+0

Danke für die Beratung. Jetzt möchte ich ein anderes Feld für die ordered_user_id in der Verkaufstabelle haben. Also kann ich es nach dem Namen des Benutzers suchen? – LahiruTM

Antwort

0

können Sie Laravel Eloqunt wie folgt verwenden.

$ Umsatz = DB :: Tabelle ('Sales') -> join ('Produkte', 'Sales.product_id', '=', 'Products.id') -> join ('Produktkategorien', 'ProductCategories.id', '=', 'Products.product_category_id') -> join ('Unternehmen', 'ProductCategories.company_id', '=', 'companies.id') -> join ('Benutzer', 'companies.user_id', '=', 'Users.id') -> auswählen ('Sales. *') -> get();

0

Nach madalinivascu beraten, ich könnte in der Lage sein, mein Problem wie folgt zu lösen. Jetzt kann ich es durch geordneten Benutzer, Produktname & Daten filtern.

$sUserName = Input::get('sUserName'); 
    $sProductName = Input::get('sProductName'); 
    $sFrom = Input::get('sFrom'); 
    $sTo = Input::get('sTo'); 

    $user_id = \Auth::User()->id; 


    // Show sales only for his products 
    $sales = Sale::with('sold_to_user') 
     ->whereHas('sold_to_user', function($q) use ($sUserName) { 
      if(!empty($sUserName)) $q->where('name','LIKE', "$sUserName%"); 
     })->with('product') 
     ->whereHas('product', function($q) use ($sProductName) { 
      if(!empty($sProductName)) $q->where('name','LIKE', "$sProductName%"); 
      }); 

    if(\Auth::User()->privilege!='administrator') $sales = $sales->where('user_id','=',$user_id); 


    $sales = $sales->orderBy('updated_at','desc')->paginate(100); 
Verwandte Themen