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;
}
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. –
@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. –