#laravel #eloquent
#laravel #красноречивый
Вопрос:
Итак, в моем файле миграции я ссылался на некоторые столбцы, подобные этому:
public function up()
{
Schema::table('products', function (Blueprint $table) {
$table->integer('category_id')->nullable()->references('id')->on('categories')->onDelete('set null');
});
}
Проблема в том, что в моем коде я могу получить доступ к взаимосвязи между моделями следующим образом: product->category
и это работает отлично. Однако в базе данных я только что увидел, что столбец не отображается как внешний ключ и не индексируется. Также мое программное обеспечение datbase не показывает взаимосвязь между различными таблицами.
Итак, мои вопросы:
- Как я мог бы решить эту проблему и сделать столбец внешним ключом и индексированным, не оказывая существенного влияния на мой код. Код также находится в рабочем состоянии.
- Почему мой текущий код работает, даже если внешнего ключа там нет?
- После изменения столбца внешнего ключа есть ли что-нибудь еще в моем коде, что мне нужно будет изменить?
Спасибо!
Ответ №1:
Ваша миграция должна состоять из 2 строк, попробуйте следующий синтаксис:
// Create the column.
$table->integer('user_id')->unsigned()->nullable();
// Create the foreign key relation.
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
См. https://laravel.com/docs/8.x/migrations#foreign-key-constraints