пожалуйста, предоставьте решение для ошибок ниже laravel - PullRequest
0 голосов
/ 29 сентября 2019

Необходимо использовать переменную в предложении where.

$eventid = Event::select('id')->orderBy('startdate')->where('startdate','>', now())->take(1)->get();
$event = Event::find($eventid);      
$speaker = Speaker::all()->where('event_id', '=', $eventid);

return view('event')->with('event', $event)->with('speaker', $speaker);

output: Таблица данных о событиях: 10 asdfsfdg 2019-10-02

Когда я использую код нижеЯ могу получить правильный вывод.

$eventid = Event::select('id')->orderBy('startdate')->where('startdate','>', now())->take(1)->get();
$event = Event::find($eventid);      
$speaker = Speaker::all()->where('event_id', '=', **10**);

return view('event')->with('event', $event)->with('speaker', $speaker);

вывод: Таблица данных о событиях: 10 asdfsfdg 2019-10-02 Данные таблицы выступающих: 6 test ste

ПожалуйстаВы можете исправить приведенный выше код для отображения с переменной в условии где.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Ваша переменная $eventid является коллекцией. find отлично работает, чтобы получить экземпляр модели, но в предложении where вы предоставляете коллекцию вместо переменной. и, таким образом, это не работает. И почему вы используете get, а затем find ?? используйте просто first

$event = Event::where('startdate','>', now())->orderBy('startdate')->first();
$speaker = Speaker::where('event_id', '=', $event->id)->get();
return view('event',compact('event','speaker'));
0 голосов
/ 29 сентября 2019

Вы извлекаете коллекцию для своей переменной $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(), даст вам первое событие после начальной даты. Вы можете захотеть что-то еще дальше, если у вас есть несколько событий. Вы можете добавить более подробную информацию о запросе, если это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...