Вы извлекаете коллекцию для своей переменной $eventid
в этой строке:
$eventid = Event::select('id')->orderBy('startdate')->where('startdate','>', now())->take(1)->get();
$eventid
- это коллекция Event нумерация объектоввсего 1. Чтобы получить идентификатор события first после даты начала, попробуйте следующее:
$event = Event::where('startdate','>', now())->first();
$eventid = isset($event)? $event->id : 0;
Вы можете связать это и поставить идентификатор в конце (->first()->id
), но у вас может не быть события после этой даты начала, и поэтому оно не будет выполнено.
Разница в этом ответе по сравнению с вашим исходным кодом заключается в том, что при использовании first
вы извлекаете один объектэто будет иметь поле id
. Если вы сделаете это с get()
, как вы это сделали, это будет коллекция, и в ней не будет поля id, что приведет к сбою метода where()
в запросе Speaker .
ПримечаниеВы также можете пересмотреть параметры запроса. То, как вы это сделали сейчас, и то, как я написал это с first()
, даст вам первое событие после начальной даты. Вы можете захотеть что-то еще дальше, если у вас есть несколько событий. Вы можете добавить более подробную информацию о запросе, если это так.