2016-06-01 4 views
0

без доступа к соответствующей моделиНетерпеливый Загрузка в Laravel полиморфных отношениях работает, но N + 1 запрос пробы все еще существуют

Все кажется красиво и хорошо работать с жадной загрузкой. При отсутствии доступа к модели, связанной с полиморфной моделью. Everything works well

Но когда я пытаюсь получить доступ к другой модели

$ Club-> события() -> Get() -> счетчик()

<tbody> 
          @foreach($Clubs as $club) 
           <tr> 
            <td><a href="{{url('database/club/').'/'.$club->id}}">{{$club->club_name}}</a> 
            </td> 
            <td>{{$club->origin}}</td> 
            <td>{{$club->hp}}</td> 
            <td>{{$club->email}}</td> 
            <td>{{$club->location}}</td> 
            <td>{{$club->category}}</td> 
            <td>{{$club->rating}}</td> 
         //This cause N+1 problem to happen 
            <td>{{$club->events()->get()->count()}}</td> 

         //I will get more problem when access more!!!!! 
            {{--<td>{{$club->records()->get()->count()}}</td>--}} 

           </tr> 
          @endforeach 
</tbody> 

This is my database structure. The Records table will record all the participant from Event/Branch Event/Club

Мой клубКонтроллер

public function index() 
{ 
    $Clubs = $this->club->with(['records','records.recordable', 'events'])->get(); 

    return view('pages.database.club', compact(['Clubs'])); 
} 

Запись Модель

class Record extends Model 
{ 

    public function recordable() 
    { 
     return $this->morphTo(); 
    } 

    public function events() 
    { 
     return $this->morphedByMany('App\Event', 'recordable', 'records', 'recordable_id'); 
    } 

    public function sub_events() 
    { 
     return $this->morphedByMany('App\Sub_Event', 'recordable', 'records', 'recordable_id'); 
    } 

    public function clubs() 
    { 
     return $this->morphedByMany('App\Club', 'recordable', 'records', 'recordable_id'); 
    } 


    public function user() 
    { 
     return $this->belongsTo('App\User', 'user_id'); 
    } 

Club Модель Модель

class Club extends Model 
{ 
    public function records() 
    { 
     return $this->morphMany('App\Record','recordable'); 
    } 

    // public function users() 
    // { 
    //  return $this->belongsToMany('App\User','club_user'); 
    // } 
    public function events() 
    { 
     return $this->hasMany('App\Event'); 
    } 

Событие

class Event extends Model 
{ 
    public function sub_events() 
    { 
     return $this->hasMany('App\Sub_Event', 'event_id'); 
    } 

    public function records() 
    { 
     return $this->morphMany('App\Record', 'recordable'); 
    } 

    // public function users() 
    // { 
    //  return $this->belongsToMany('App\User', 'event_user'); 
    // } 

    public function club() 
    { 
     return $this->belongsTo('App\Club'); 
    } 

Refe rence

Я пытаюсь найти ответ, но его всегда кажется устаревшим. Я попробовал решение от http stackoverflow.com/questions/26727088/laravel-eager-loading-polymorphic-relations-related-models , но так и не смог решить эту проблему.

Extra у меня не был достаточно репутации размещать более 2 фотографий, чтобы описать мою проблему

ответ

1

Вы доступ к вашим заряженным отношениям неправильно. При выполнении $club->events()->get()->count() Вы спрашиваете модель $club, чтобы получить связь снова из базы данных вместо того, чтобы пытаться получить отношения, которые уже загружены в нетерпеливую загрузку.

Правильным способом было бы изменить эти две линии: $club->events->count().

+0

Вы очень профессиональный !!! Ваш ответ отлично работает !!!! Спасибо за помощь. Как вы их узнаете? –

+0

Практика делает совершенным :) Чем больше проблем вы сталкиваетесь, тем больше знаний вы получаете с течением времени. –

+0

Или, вы знаете, внимательно прочитайте [docs] (http://laravel.com/docs). : D – Doom5

 Смежные вопросы

  • Нет связанных вопросов^_^