Физическая связь Laravel 7 между таблицами отсутствует

Я следовал руководству по отношениям «многие ко многим» с Laravel (7 в моем случае).

Результат хороший, я многому научился, но что мне кажется странным, так это то, что у меня нет физических отношений между разными таблицами.

Я создал отношения «многие ко многим», которые должны связать 3 таблицы, продукты, категории и продукты_категории.

Мои вопросы :

1- Важно ли иметь физическую связь в схеме базы данных? 2- Как мне сделать так, чтобы эти отношения отображались на моей диаграмме?

Вот текущая фотография схемы базы данных:

введите здесь описание изображения

В этой базе данных у меня есть ссылки между таблицами:

введите здесь описание изображения


person David    schedule 26.04.2020    source источник
comment
Подсказка в названии; он называется языком структурированных запросов, поэтому запрос определяет структуру.   -  person Strawberry    schedule 26.04.2020
comment
Привет Stawberry, спасибо за ваш ответ. Я всегда стараюсь быть перфекционистом, поэтому я беспокоюсь о том, что не вижу отношений. Как вы можете видеть на втором фото, добавленном к моему сообщению, мы хорошо видим отношения. Спасибо еще раз.   -  person David    schedule 26.04.2020
comment
Какой перфекционист позволяет столам накладываться друг на друга? ;-)   -  person Strawberry    schedule 26.04.2020
comment
Вы можете (и, возможно, должны) определить ограничения таблицы, но это не обязательно.   -  person Strawberry    schedule 26.04.2020


Ответы (1)


Отношения Laravel отличаются от отношений вашей базы данных (MySQL или других).

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

Если вы хотите увидеть отношения между вашими таблицами, обязательно укажите внешние ключи в своей схеме миграции (https://laravel.com/docs/7.x/migrations#foreign-key-constraints), например:

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedBigInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});

Для сводных таблиц вы также можете использовать схему миграции следующим образом:

Schema::table('category_product', function (Blueprint $table) {
    $table->unsignedBigInteger('category_id');
    $table->unsignedBigInteger('product_id');
    $table->foreign('category_id')->references('id')->on('categories');
    $table->foreign('product_id')->references('id')->on('products');
});
person Christophe Hubert    schedule 26.04.2020
comment
Привет Кристоф, спасибо за ваш ответ. Тот же ответ, что и у Stawberry: я всегда стараюсь быть перфекционистом, поэтому я беспокоюсь о том, что не вижу отношений. Как вы можете видеть на втором фото, добавленном к моему сообщению, мы хорошо видим отношения. Спасибо еще раз. - person David; 26.04.2020
comment
Добавлено больше подробностей о том, как вернуть ваши отношения. - person Christophe Hubert; 26.04.2020
comment
Спасибо, Кристоф, ваш код великолепен. Мой вопрос, мне нужно отношение многие ко многим. Код, который вы добавили, предназначен для одного ко многим? Спасибо еще раз. - person David; 26.04.2020
comment
если вы хотите, чтобы многие ко многим вам нужно было иметь сводную таблицу, принцип будет таким же для схемы - person Christophe Hubert; 26.04.2020
comment
Да, я понял, что мне нужна сводная таблица, она у меня есть, вы можете увидеть мое исходное сообщение. Я собираюсь поискать в документации и Google, чтобы добавить эти отношения. - person David; 26.04.2020
comment
Спасибо за отличный ответ, за это время я нашел такое же решение. Я поставил ваш ответ как лучший полученный ответ. Спасибо еще раз. - person David; 26.04.2020