2016-03-21 14 views
2

numaralandırıyorum Bir etkinlik rezervasyon sistemi üzerinde çalışıyorum. Kullanıcı bir tarih aralığını aradığında, olayın mevcut olup olmadığını kontrol eden Event modelimin içinde bir işlev kullanıyorum. şöyle Arama fonksiyonu şu anda çalışır: Ben döngü zorundaSorgulama sonucu Laravel döngü, daha sonra

$events = Event::where('name', 'LIKE', '%' . $request->get('term') . '%') 
     ->where('accepted',1) 
     ->orWhere('description', 'LIKE', '%'.$request->get('term').'%') 
     ->orWhere('city', 'LIKE', '%'.$request->get('term').'%')->paginate(15); 

    $availableEvents = new Collection(); 

    if ($request->get('from') !== '' AND $request->get('to') !== '') { 
     foreach($events as $key => $event) { 
      if ($event->is_available($request->get('from'), $request->get('to'))) { 
       $availableEvents->add($event); 
      } 
     } 
    } 
    else { 
     $availableEvents = $events; 
    } 

    return view('frontend.events.results', ['events' => $availableEvents, 'request' => $request]); 

sorgu oluşturucu içindeki durumunu kontrol edemez. Illuminate\Database\Eloquent\Collection kullanıyorum çünkü olayları sorgu oluşturucusundan aldığım paginated şeyden kaldıramıyorum.

Eloquent Collection'u sayfalara ayrılmış bir koleksiyona dönüştürmenin bir yolu var mı?

Şimdiden teşekkürler!

P.S. appends() kullanmak için $request geçiriyorum, böylece sayfalandırma sırasında sorgu dizesi parametrelerini koruyabilirim.

DÜZENLEME: Bunun yerine,

use \Illuminate\Pagination\LengthAwarePaginator; 

... 

$page = $request->get('page', 1); 
$limit = 10; 
$paginator = new LengthAwarePaginator(
    $availableEvents->forPage($page, $limit), $availableEvents->count(), $limit, $page, ['path' => $request->path()] 
); 

Sonra görünümü ile birlikte $paginator pass: is_available fonksiyonu

public function is_available($from, $to) { 

    $from = Carbon::createFromFormat('d-m-Y', $from); 
    $to = Carbon::createFromFormat('d-m-Y', $to); 

    foreach($this->not_availables as $notAvailable) { 

     $notAvailableFrom = Carbon::createFromFormat('Y-m-d', $notAvailable->from); 
     $notAvailableTo = Carbon::createFromFormat('Y-m-d', $notAvailable->to); 

     if ($from->gte($notAvailableFrom) OR $to->lte($notAvailableTo)) { 
      return false; 
     } 
    } 

    return true; 
} 
+0

Sorgu oluşturucunuzdaki '-> WhereBetween ('event_date', [$ from, $ to])' ı kullanamaz mısınız? 'In_available ($ from, $ to)' işlevinin ne yaptığını göremiyoruz ama el ile kontrol ettiğinizi varsayarım. –

+1

@Ciccio Ne yazık ki değil. Olayların ayrı bir tabloda bulunmadığı dönemleri kaydediyoruz. Bu tablo, etkinliğin kimliğini ve mevcut olmadığından itibaren bir tarihini içerir. Benim soruma yöntem eklenmiştir. –

cevap

1

elle Böyle Illuminate\Pagination\LengthAwarePaginator kullanabilirsiniz paginator

bir oluşturabilir senin $availableEvents. Görünümünüzde hala $events var, sayfalama işlemini $events->render(); ile yapabilir ve normalde yaptığınız gibi $request'dan yol parametrelerini iletebilirsiniz.

+1

Tamamen çalıştı. Çok teşekkürler! –

İlgili konular