2016-02-24 6 views
0

Мои user table и item table связаны между собой многими отношениями, item table имеет некоторые данные в иностранных таблицах, например color table У меня сводная таблица, которая связывает эти два. Мой вопрос: если я хочу получить все элементы, связанные с пользователем цветом, как я могу получить их с нетерпением загрузки?Как получить нагрузку во многих отношениях в laravel 5?

Я знаю, что $user->item доставит все предметы для этого пользователя.

Но если я хочу загрузить все элементы для этого пользователя с атрибутами цвета в одном запросе, как мне это сделать? На данный момент я пробегаем по пунктам, связанным с пользователем и отложенной загрузки каждый данных мне нужно, например

foreach($user->item as $i){ 

     echo($i->item->color) 

} 

Это означает, что каждый цикл делает новый запрос ...

здесь модели:

модель Пользователь:

public function item(){ 
     return $this->belongsToMany('App\item')->withTimestamps(); 
    } 

товар модель:

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

и это схема для сводной таблицы

Schema::create('item_user', function(Blueprint $table) { 

      $table->unsignedInteger('user_id')->unsigned()->index(); 
      $table->foreign('user_id') 
       ->references('id') 
       ->on('users') 
       ->onDelete('cascade'); 

      $table->unsignedInteger('item_id')->unsigned()->index(); 
      $table->foreign('item_id') 
       ->references('id') 
       ->on('items') 
       ->onDelete('cascade'); 

      $table->timestamps(); 
     }); 
+0

Можете ли вы показать или модели или ваши отношения? – oseintow

+0

опубликовано в теме – Chriz74

ответ

1

Вы можете просто использовать Nested Eager Loading

жадная загрузка осуществляется с помощью with(): в вашем случае, вы можете использовать следующее:

public function item(){ 
    return $this->belongsToMany('App\item')->withTimestamps()->with('color'); 
} 

Это приведет к загрузке цвета на «элемент». Однако вы можете также нетерпеливый нагрузки непосредственно на модели пользователя в контроллере:

User::with('items.color')->find(1); 

Я не уверен, основываясь на своем коде, что отношения/модель, как это, но вы получите точку, я думаю.

+0

Спасибо, я изменил модель, как вы предложили. По-видимому теперь $ user-> items получит все пользовательские элементы + цвет в 3 запросах (?) – Chriz74

+0

Можете ли вы опубликовать отношение 'items'? Я только изменил отношение 'item', которое является атрибутом ownToMany, отношение' items', вероятно, 'hasMany'? – Luceos

+0

Я уже разместил отношения в главном вопросе. Это то, что вы просите? – Chriz74

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