2016-05-10 3 views
0

У меня есть приложение Laravel и я следующие моделиLaravel многие ко многим

  1. Workshop
  2. WorkshopCategory

У меня есть 3 таблицы,

  • мастерские
  • workshop_categories
  • workshop_category_relation

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

{ 

"id":14, 
"workshop_name":"First Workshop", 
"description":"Located all over", 
"categories": array: [ 
     0 => "wood" 
     1 => "metal" 
    ] 

} 

Что бы лучшим способом быть для достижения этой цели? я бы в моей модели мастерской добавить следующее:

public function categories() 
    { 
     return $this->belongsToMany('App\Workshopcategory', 'workshop_category_relation', 'workshop_id', 'category_id'); 
    } 

Я добавил выше функцию для моей модели мастерской и при попытке вывода семинар вроде следующего:

$workshop = Workshop::FindOrFail(14); 
return $workshop->categories(); 

я получаю следующее сообщение об ошибке :

Object of class Illuminate\Database\Eloquent\Relations\BelongsToMany could not be converted to string

ответ

0

Я думаю, вы просто ищете Many to Many relation.

Все, что вам нужно сделать, это переименовать таблицу workshop_category_relation в 'workshop_category', а затем ваш belongsToMany должен работать.

+0

Ive обновил вопрос, как я пробовал этот метод. –

+0

Что происходит, когда вы 'dd ($ workshop);' перед возвращением? Я думаю, проблема в том, что вы используете 'categories()' вместо просто 'categories'. – Samsquanch

0

Когда вы звоните:

return $workshop->categories()->get(); 

или просто:

return $workshop->categories; 

Вы получите Collection категорий, связанных с мастерской, а затем вы можете itterate более как:

foreach($workshop->categories as $category) { 
    $category->field_name 
}