Мне трудно понять ваш код ... Позвольте мне попробовать и посмотреть, правильно ли я его понял ...
У вас есть две модели:
- Модель
Collection
сохранено в таблице collections
- Модель
Genre
сохранено в таблице genres
Так как между ними много-много отношений, вам нужна третья таблицасвязать их вместе.
Согласно соглашению об именах, Laravel ожидает, что вы назовете его на основе двух моделей, упорядоченных в алфавитном порядке.Таким образом, чтобы создать связь между коллекциями и жанрами, вам необходимо создать таблицу collection_genre
, которая имеет collection_id
в качестве ссылки на таблицу коллекций, а также genre_id
для идентификации связанного жанра.
Затем вы можете определить ваши отношения следующим образом:
class Collection extends Model {
public function genres() {
$this->belongsToMany(\App\Models\Genre::class);
}
}
и
class Genre extends Model {
public function collections() {
$this->belongsToMany(\App\Models\Collection::class);
}
}
Теперь я не уверен, как выглядит ваш контроллер, так как в вопросе есть недопустимый кодэто, но я подозреваю, что вы хотите искать жанры для данной коллекции.
Ваш код может выглядеть так:
Class CollectionController extends Controller {
function getGenres(Collection $collection) {
return $collection->genres;
}
}
Это вернет жанры для данной коллекции.Если вы хотите отформатировать это, вы можете создать Eloquent Resource для этого:
Class CollectionResource extends Resource {
public function toArray() {
return [
'name' => $this->name,
'meta' => $this->meta
];
}
}
В вашем контроллере вы можете сделать:
Class CollectionController extends Controller {
function getGenres(Collection $collection) {
return CollectionResource::collection($collection->genres);
}
}