2017-05-02 2 views
1

Eloquent Beziehung wie folgt:Eloquent: Filter beide Drehtisch und Modelltisch

„speichert“ gehört zu viele „storedaytimes“ (zu viele gehören)

Der Schwenktisch (store_day_time_stores) einen Schlüssel namens " user_id ", hat die storedaytimes-Tabelle ein Feld namens" date ".

Ich möchte Datensätze in "storedaytimes" basierend auf angegebenen "user_id (aus Pivot-Tabelle)" und ein "Start" und "End" -Datum (aus storedaytime Tabelle) filtern.

Meine aktuelle Abfrage ist

$storedaytime->stores() 
    ->wherePivot('user_id','=',$user) 
    ->orderBy('date') 
    ->where('date','>=',$start) 
    ->where('date','<=',$end)->get(); 

Es ist ein sehr unheimlich aussehende Abfrage produzieren, die nicht funktioniert:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'date' in 'where clause' (SQL: select stores .*, order_day_time_store . order_day_time_id as pivot_order_day_time_id , order_day_time_store . store_id as pivot_store_id , order_day_time_store . user_id as pivot_user_id , order_day_time_store . id as pivot_id from stores inner join order_day_time_store on stores . id = order_day_time_store . store_id where order_day_time_store . order_day_time_id is null and order_day_time_store . user_id = 4 and date >= 2017-05-01 12:00:00 and date <= 2017-05-31 12:00:00 order by date asc)

Bitte help.thank Sie: 3

Antwort

0

heraus ich: Die folgende Abfrage funktioniert:

$storedaytime ->where('date','>=',$start) 
->where('date','<=',$end) 
->whereHas('stores',function($q) use($user){ 
       $q->where('user_id',$user);}) 
->get(); 
0

Versuchen Sie Folgendes:

$storedaytime->stores() 
    ->wherePivot('user_id','=',$user) 
    ->whereBetween('storedaytimes.date', [$start, $end]) 
    ->orderBy('storedaytimes.date') 
    ->get(); 

Es wird empfohlen, dass die order by-Klausel am Ende von SQL-Anweisungen steht, es sei denn, Sie müssen das Datum vorher bestellen. Es gibt keinen Grund, es in Ihrem Fall zu tun, also legen Sie es am Ende.

+0

re Ordnung zur Kenntnis genommen. das funktioniert nicht, es gibt diesen Fehler: SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'order_day_time_store.order_day_time_store.user_id' in 'Where-Klausel' (SQL: Wählen Sie 'speichert'. *,' order_day_time_store'.' order_day_time_id' als 'pivot_order_day_time_id',' order_day_time_store' .store_id' als 'pivot_store_id',' order_day_time_store' 'user_id' als' pivot_user_id', 'order_day_time_store' als 'pivot_id' von' stores' inner join 'order_day_time_store' 'on' stores'.id' = 'order_day_time_store'.store_id' wobei' order_day_time_store' 'order_day_time_id' null ist und – Faye

+0

Ok, dann entferne 'store_day_time_stores' aus der wherePivot-Klausel – suecarmol

Verwandte Themen