Laravel — Как я могу изменить существующий ссылочный столбец и сделать его столбцом внешнего ключа?

#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. Почему мой текущий код работает, даже если внешнего ключа там нет?
  3. После изменения столбца внешнего ключа есть ли что-нибудь еще в моем коде, что мне нужно будет изменить?

Спасибо!

Ответ №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