Laravel -单个视图中的多个控制器



我正在尝试编写一个简单的事件页面。这个页面应该显示一个特定的事件和它的功能(包括其他与问题无关的信息)。

我尝试了几种不同的方法,但都没有运气,我觉得这是我可能接近成功的方法,有什么建议吗?

如果你认为问题出在其他地方,我可以提供其他代码摘录,但我认为我的问题出在这7个文件中。

当前的错误是"属性[特征]在此集合实例上不存在。"并指向EventController的show()函数。如果有人能帮忙,我将不胜感激。

web.php

Route::get('cards/{id}', 'CardController@show');
Route::get('event/{id}', 'EventController@show');

event.blade.php

<h1 class="big-title">
</h1>
<section id="events">
@each('partials.event', $event, 'event')
</section>

(泛音)event.blade.php

<header>
<h2 class="event-name fsb">
{{ $event->name }}
</h2>
</header>
<p class="event-description pdl1em">
{{ $event->description }}
</p>
<ul class="event-dates pdl1em">
<ul>
@each('partials.features', $event_features, 'feature')
</ul>
</ul>

Event.php

class Event extends Authenticatable
{
public function features() {
return $this->hasMany('AppModelsEventFeature');
}
}

EventFeature.php

class EventFeature extends Authenticatable
{
public function event() {
return $this->belongsTo('AppModelsEvent');
}
}

EventController

class EventController extends Controller
{
public function show($id)
{
$event = DB::table('event')->where('id', $id)->get();
return view('pages.event', ['event' => $event, 'features' => $event->features]);
}
}

EventFeatureController

class EventFeatureController extends Controller
{
public function show($id)
{
$event_features = DB::table('event_features')->where('id', $id)->get();
return view('pages.event', ['event' => $event_features->eventClass, 'features' => $event_features]);
}
public function list($event_id)
{
if (!Auth::check()) return redirect('/login');
$event_features = DB::table('event_features')->where('event_id', $event_id)->orderBy('id')->get();
return view('pages.event', ['event_features' => $event_features]);
}
}

当您想要检索单个项目时,使用find($id)first()来检索模型的实例。当你调用get()时,你得到一个数组的集合,里面有实例。

当使用DB::table('events')时,您不会得到模型的实例,您会得到一个通用对象实例=>你不能使用模型类定义的方法,比如关系之类的。直接使用模型代替Event::where(...

将方法更改为

class EventController extends Controller
{
public function show($id)
{
$event = Event::findOrFail($id);
return view('pages.event', ['event' => $event, 'features' => $event->features]);
}
}