Laravel ORM отношения многих ко многим ведет себя как один ко многим - PullRequest
0 голосов
/ 25 января 2019

Моя проблема в том, что я пытаюсь установить взаимосвязь между постами и жанром.Вот что я сделал до сих пор.

class Post extends Model
{

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

}

class Genre extends Model
{
    public function posts()
    {
        return $this->hasMany('App\Post');
    }

}

жанр Таблица

+----+--------+
| id |  name  |
+----+--------+
|  1 | News   |
|  2 | Sports |
+----+--------+

стол сообщений

+----+----------------+
| id |     title      |
+----+----------------+
|  1 | Political News |
|  2 | Sport Update   |
+----+----------------+

genre_post стол

+----+---------+----------+
| id | post_id | genre_id |
+----+---------+----------+
|  1 |       1 |        1 |
|  2 |       1 |        2 |
|  3 |       2 |        2 |
+----+---------+----------+

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

Post::where('slug', '=', $id)->with("genres")->first(); // no problem

Но когда я попробовал обратное, это не работает.

$posts = Genre::where( "slug", "=", $id )->with("posts")->first();

Я получаю следующееошибка.

Столбец не найден: 1054 Неизвестный столбец 'post.genre_id' в 'выражении where' (SQL: выберите * из post, где post. genre_id

Я понимаю, что laravel пытается получить доступ к столбцу genre_id из таблицы post, которого не существует, поскольку это отношение многих ко многим, что означает, что один пост может содержать более одного жанра, а один жанр может содержать болееодин пост.

Есть идеи, как мне решить эту проблему?

1 Ответ

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

Это ожидается, так как hasMany само по себе является отношением один ко многим.Используйте belongsToMany вместо.

class Genre extends Model
{
    public function posts()
    {
        return $this->belongsToMany('App\Post');
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...