【问题标题】:Laravel - multiple controllers in single viewLaravel - 单一视图中的多个控制器
【发布时间】:2022-11-18 08:44:10
【问题描述】:

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

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

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

我遇到的当前错误是“此集合实例上不存在属性 [功能]”。并指向 EventController show() 函数。如果有人能提供帮助,我将不胜感激。

网站.php

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

事件.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>

事件.php

class Event extends Authenticatable
{
    public function features() {
        return $this->hasMany('App\Models\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]);
    }
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    当您想要检索单个项目时,请使用 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]);
        }
    }
    

    【讨论】:

    • 嘿,我在使用“::find”时遇到了这个错误:count(): 参数 #1 ($value) 必须是 Countable|array 类型,给出 AppModelsEvent
    • @GuilhermeMoreira ::find() 返回单一模型,或null;应该没有理由在任何地方使用count(),但你原来的问题在任何地方都没有count。如果您有新问题,请提出新问题;不要将其发布在对答案的评论中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2016-09-02
    • 2016-11-03
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多