Извлечение данных из реляционной таблицы в AppServiceProvider - PullRequest
1 голос
/ 27 сентября 2019

У меня есть две таблицы ГРУПП и СТРАНИЦ в отношении одной группы ко многим страницам.Таблицы связаны вместе с помощью group_id (в таблице страниц).Текущий код позволяет мне отображать имена всех групп, но не отображать страницы, назначенные определенной группе.

Группа моделей:

class Group extends Model
{
    protected $fillable = [
        'title',
        'navbar_id',
    ];

     public function pages()
    {
        return $this->hasMany(Page::class);   
    }
}

Страница модели:

class Page extends Model
{
    protected $fillable = [
        'title',
        'group_id'
    ];    
    public function groups()
    {
        return $this->belongsTo(Group::class, 'group_id');
    }

ForeignKey:

public function up()
    {
        Schema::table('pages', function(Blueprint $table){
            $table->integer('group_id')->unsigned()->change();
            $table->foreign('group_id','pages_group_id_foreign')->references('id')->on('groups');
        });
    }

AppServiceProvider:

view()->composer('*', function($view){
            $view->with('topbar', Group::where('visible',1)->with(['pages'])->get());
});

и фрагмент View:

@foreach($topbar as $group)
<li class="nav-item dropdown">
   <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">{{ $group->title }}</a>
   <ul class="dropdown-menu">
      @foreach($group->pages() as $page)
      <li class="">
         <a href="#" class="dropdown-item">{{ $page->title }}</a>
      </li>
      @endforeach
   </ul>
</li>
@endforeach

1 Ответ

3 голосов
/ 27 сентября 2019

Ваш нетерпеливый код загрузки и отношения установлены правильно

Ошибка в представлении Blade, вы пытаетесь получить доступ к экземпляру отношения pages() на group вместо коллекции pages

Вызовите коллекцию, а не отношения

@foreach($group->pages as $page)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...