@yellow_pus

Почему не работает связь многие ко многим?

У меня есть таблица: categories, posts, category_post. То есть, назвал их по всем правилам ларавель. Теперь, по идее, я могу дотянуться до обей таблиц, прописав в модели category такой метод
public function posts(){
        return $this->belongsToMany(Posts::class);
    }

И в контроллере возвращая вот это
public function index()
    {
        $categories = Categories::all();
        return view('posts',['categories'=>$categories]);
    }

Но почему то, вместо двух таблиц, я получаю вот такую ошибку
SQLSTATE[42P01]: Undefined table: 7 ОШИБКА: отношение "categories_posts" не существует
То есть требует переименовать category_post в categories_posts.
Я пробовал переименовать эту таблицу, но тогда, нельзя будет с ней работать, например, при добавлении новой записи
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
ig0r74
@ig0r74
MODX-разработчик
Рабочий вариант (скорее всего здесь у тебя перепутаны местами category_id и post_id):
public function products(): BelongsToMany
{
    return $this->belongsToMany(Product::class, 'category_product', 'category_id', 'product_id');
}

Миграция:
Schema::create('category_product', function (Blueprint $table) {
    $table->primary(['category_id', 'product_id']);
    $table->foreignId('category_id')->nullable();
    $table->foreignId('product_id')->nullable();
});

И еще классы, должны именоваться в единственном числе Post, а не Posts. Таблицы во множественном - тут верно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@lil_koi
лучший из худших
Вторым аргументом надо передать название таблицы, где лежат связи
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы