2017-12-20 4 views
0

ich die folgende Abfrage habe (getrimmt), die Zimmer Benutzer für die Reservierung zur Liste:Laravel Eloquent Abfrage build wählen min Wert

$buildquery=Room:: 

     with(['hotel' => function ($query) { 
      $query->where('status', 0); 
     }]) 

     ->with('image')->with('amenities'); 

     if ($request->filled('location_id')) { 
      $buildquery->Where('city', $request->location_id); 
     } 

     $buildquery->Where('astatus', 1)->Where('status', 0); 

     $rooms = $buildquery->simplePaginate(20); 

tatsächliche Abfrage (nicht beschnitten):

select `rooms`.*, 
(select count(*) from `amenities` inner join `amenities_room` on `amenities`.`id` = `amenities_room`.`amenities_id` where `rooms`.`id` = `amenities_room`.`room_id` and `amenities_id` in (?)) as `amenities_count` 
from 
`rooms` 
where `city` = ? and `price` between ? and ? and `astatus` = ? and `status` = ? having 
`amenities_count` = ? 
limit 21 offset 100 

Es listet alle verfügbaren Zimmer im Hotel auf. Ich muss nur ein Zimmer für ein Hotel mit dem geringsten Preis auswählen.

Antwort

0

Sie können use order by

$buildquery->orderBy('COL_NAME', 'DESC')->get(); 

wenn Sie nur ein benötigen, können Sie take(1)

+0

Ihre Abfrage ergibt insgesamt nur ein Ergebnis. Hinweis: Ich habe viele Hotels (jedes Hotel hat viele Zimmer) –

+0

Also wenn ich dich richtig verstehe. Sie möchten die günstigsten Zimmer für jedes Hotel, das Sie haben. Dann ist es besser, Relationen aus dem Hotelmodell zu machen und eine Abfrage wie 'Hotel :: mit ('room' => function ($ query) { $ query-> orderBy ('price', 'asc') -> first)); }]) -> get(); ' – user3350597

+0

Hmm denkt auch gleich. Aber alle Beziehungen, die bereits zu Räumen wie (Annehmlichkeiten, Zimmertypen, Bilder) und Standortfeldern gebaut wurden, sind nur im Zimmer verfügbar –

0
Hotel::with('room' => function($query) { 
    $query->orderBy('price', 'asc')->first(); 
}, 
'room.images', 
'room.roomTypes', 
'room.amenities']) 
->get(); 

Sie etwas tun können Struktur zu erhalten wie:

{ 
    'Hotel': { 
     'Room': { 
      'Images': { 
       // 
      }, 
      'roomTypes': { 
       // 
      }, 
      'amenities': { 
       // 
      } 
     } 
    } 
} 

Ist das was willst du?

+0

Es sieht vielversprechend aus, lass es mich versuchen –

+0

Miss offene eckige Klammer, sorry. Hotel :: mit (['room' => funktion ($ query) { – aK0nshin

+0

Die obige frage funktioniert teilweise, ich habe diese einrichtung filter: wenn die auswahl gewählt wurde, füge ich diese frage hinzu, if ($ request-> filled ("Annehmlichkeiten")) { $ Annehmlichkeiten = $ Anfrage-> Annehmlichkeiten; $ count = Anzahl ($ Ausstattung); $ Buildquery-> withCount (['Ausstattung' => Funktion ($ query) verwenden ($ Annehmlichkeiten) { $ query->, bei dem ('amenities_id', $ Ausstattung); }]) -> mit ('amenities_count', $ count);? } wie dies oben Abfrage hinzuzufügen –