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

7ajki6be  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在尝试编写一个简单的事件页面。这个页面应该显示一个特定的事件和它的功能(包括其他信息不相关的问题)。
我已经尝试了几种不同的方法,但没有成功,这是我觉得我可能接近成功的方法,有什么建议吗?
我可以提供其他提取的代码,如果你认为问题在于其他地方,但我认为我的问题在于这7个文件。
我遇到的当前错误是“Property [features] does not exist on this collection instance.”并指向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('App\Models\EventFeature');
    }
}

EventFeature.php

class EventFeature extends Authenticatable
{
    public function event() {
      return $this->belongsTo('App\Models\Event');
    }
}

事件控制器

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]);
    }
}

事件功能控制器

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]);
    }
}
g6ll5ycj

g6ll5ycj1#

当您要撷取单一项目时,请使用find($id)first()来撷取模型的执行严修。当您呼叫get()时,会取得数组的集合,其中包含执行严修。
当使用DB::table('events')时,您不会得到模型的示例,而是得到一个通用对象示例=〉您不能使用Model类定义的方法,如关系等。请直接使用模型,而不是Event::where(...
将方法更改为

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

相关问题