请提供以下错误的解决方案

时间:2019-09-29 18:12:42

标签: laravel

需要在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);

输出: 事件表数据: 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测试版

请您更正上面的代码,以便在where条件下显示变量。

2 个答案:

答案 0 :(得分:0)

您将在此行中为您的value /= 10 # float division 变量引入一个集合

$eventid

$eventid = Event::select('id')->orderBy('startdate')->where('startdate','>', now())->take(1)->get(); 是总共 Event 个对象的集合。对象的编号总共为1。要获取开始日期后的 first 事件的ID,请尝试以下操作:

$eventid

您可以将其链接起来并将ID放在末尾($event = Event::where('startdate','>', now())->first(); $eventid = isset($event)? $event->id : 0; ),但是在此开始日期之后您可能没有任何事件,因此它将失败。

此答案与原始代码的区别在于,通过使用->first()->id,您将拉出一个具有first字段的对象。像以前一样使用id进行操作,它将是一个集合,并且没有id字段,因此,您在 Speaker 查询中使用的get()方法将失败。

注意,您可能还希望修改查询参数。您现在拥有它的方式以及我用where()编写它的方式将为您提供startdate之后的第一个事件。如果您有多个事件,则可能需要更进一步的信息。在这种情况下,您可以在查询中添加更多详细信息。

答案 1 :(得分:0)

您的$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'));