我正在尝试编写一个简单的事件页面。这个页面应该显示一个特定的事件和它的功能(包括其他与问题无关的信息)。
我尝试了几种不同的方法,但都没有运气,我觉得这是我可能接近成功的方法,有什么建议吗?
如果你认为问题出在其他地方,我可以提供其他代码摘录,但我认为我的问题出在这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]);
}
}