Недавно решил посвятить свободное время на более углублённое изучение довольно популярной лары, однако возник небольшой казус, который поставил меня в тупик. В чём суть: существуют две таблицы, допустим, games и game_genres (именно так, т.к. в системе есть жанры и для других категорий), сводная для них будет games_games_genres, при этом я хочу сделать сводную не по id, а по полям name, так и так в обоих таблицах они определены как уникальные, пытаюсь загнать подобную тему стандартными методами лары.
//Для игр
public function genres() {
return $this->belongsToMany(game_genres::class, 'games_games_genres', 'game_name', 'genre_name');
}
//Для жанров
public function games() {
return $this->belongsToMany(games::class, 'games_games_genres', 'genre_name', 'game_name')->withPivot('genre_name')->withTimestamps();
}
//Сам запрос
$data = games::with('genres')->paginate(10);
И вот в чём загвоздка, в дате для каждого объекта создаётся массив genre: [], но при этом он пустой, хотя записи об этих самых жанрах есть. Раньше мне доводилось подобное проворачивать через pivot, но в этом конкретном случае я уже по всякому покрутился, но всегда null, соответственно, вопрос, в чём может быть причина?
Миграция сводной.
Schema::create('games_games_genres', function (Blueprint $table) {
$table->id();
$table->timestamps();
//Внешний ключ на игры
$table->string('game_name');
$table->foreign('game_name')->references('name')->on('games')->onDelete('cascade');
//Внешний ключ на жанры
$table->string('genre_name');
$table->foreign('genre_name')->references('name')->on('game_genres')->onDelete('cascade');
//Создание уникальной пары
$table->unique(['game_name','genre_name'], 'game_name_genre_name_unique');
});
Неужто по умолчанию лара поддерживает только по id? Сделать второй запрос ручками не то что бы сложно, но хотелось бы понять, мб это я что-то неправильно понимаю?