Получить данные из красноречивых отношений с Pivot в laravel - PullRequest
0 голосов
/ 25 января 2020

У меня есть таблица 3 БД.

показывает

Table with my shows

show_genres

Table with my genres

show_show_genre

enter image description here

In моя шоу-модель, у меня есть:

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

Поэтому, когда я сделаю:

$show=Show::find(1);

$show->genres, дайте мне коллекцию со всеми жанрами, которые имеют show_id в show_genres db.

У меня также есть модель ShowGenre, где есть все жанры, которые я использую.

Потому что я хочу использовать syn c для своих жанров, эти имена должны быть в базе данных.

Но как мне найти все шоу, которые имеют идентификатор жанра.

Я не мог найти способ получить этот список. Пожалуйста, помогите, спасибо.

Редактировать:

This is shows_genres db table

Ответы [ 3 ]

1 голос
/ 25 января 2020

Вы должны сделать это по-другому:

Иметь модель для жанра

Ваш метод отношений в модели жанра должен быть

public function shows()
    {
        return $this->belongsToMany('App\Show', 'shows_genres');
    }

serveToMany принимает два параметра, имя модели и сводной таблицы, если не стандартное имя.

Ваше решение:

    //Get genre 'strict'
    //where could be followed by column name example:whereSlug, whereName
    $strictGenre = Genre::whereName('strict')->first();

    if($strictGenre)
    {
        //get shows of this genre
        $strictShows = $strictGenre->shows;
    }

Прочитать множество связей:

https://laravel.com/docs/6.x/eloquent-relationships#many -в-многих

0 голосов
/ 25 января 2020

Предполагая, что у вас есть эти отношения в модели вашего жанра

public function shows()
{
   return $this->belongsToMany('App\Show', 'shows_genres', 'genre_id', 'show_id');
}

Тогда вы можете напрямую получить все шоу по идентификаторам жанров, как это

$shows = Genre::find($id)->shows;
0 голосов
/ 25 января 2020

Вы можете использовать

$show->genres()
    ->wherePivot('column', value)
    ->get();

По умолчанию имя сводной таблицы должно быть в единственном числе: show_genre (без множественного числа s)

См. документы

...