У меня есть таблица "posts", которая содержит внешний ключ user_id, как я могу добавить этот ключ в таблицу при миграции? - PullRequest
0 голосов
/ 08 мая 2020

это миграция

 Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

я пытался сделать это с помощью этих строк

$table->bigInteger(‘user_id’)->unsigned()->nullable()->default(null);
$table->foreign(‘user_id’)->references(‘id’)->on(‘users’)->onDelete(‘cascade’);

что я сделал

Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->integer(‘user_id’)->unsigned()->nullable()->default(null);
            $table->foreign(‘user_id’)->references(‘id’)->on(‘users’)-
            >onDelete(‘cascade’);

что я получаю ErrorExceptionenter

Использование неопределенной константы 'user_id' - предполагается 'user_id' (это вызовет ошибку в будущей версии PHP)

1 Ответ

0 голосов
/ 08 мая 2020

@ Mirage Три вопроса:

  1. почему вы используете обратные кавычки вместо одинарных кавычек?
  2. почему вы используете только $table->id();, а должно быть $table->integer('id');?
  3. почему вы используете $table->timestamps();, а должно быть $table->timestamp('created');?

Эта миграция с настройками для использования одинарных кавычек вместо обратных кавычек с правильным использованием $table->id(); и $table->timestamp('created'); отлично подходит для меня:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class Posts extends Migration
{
     public function up()
    {
        if(!Schema::hasTable('posts')) {
            Schema::connection('migrate')->create('testPosts', function (Blueprint $table) {
                $table->integer('id');
                $table->integer('user_id')->unsigned()->nullable()->default(null);
                $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
                $table->timestamp('created');
            });
        }
    }

    public function down()
    {
        if(Schema::hasTable('posts')) {
            Schema::connection('migrate')->dropIfExists('posts');
        }
    }
}
...