微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel8 不会对迁移创建外键约束

如何解决Laravel8 不会对迁移创建外键约束

我正在使用 Laravel8。我有两个表 contact_listscontacts

contact_lists有很多contacts

这是我在 contact_lists生成外键约束的迁移代码

public function up()
   {
      Schema::create('contacts',function (Blueprint $table) {
         $table->id();
         $table->unsignedBigInteger('user_id');
         $table->foreignId('contact_list_id')->nullable()->constrained()->onDelete('cascade');
         $table->string('first_name');
         $table->string('last_name');
         $table->string('phone');
         $table->longText('organization')->nullable();
         $table->longText('note')->nullable();
         $table->timestamps();
      });
   }

但我不知道为什么没有生成外键。

解决方法

Laravel 使用 MyISAM 作为默认的 mysql 存储引擎。 所以请确保在 config/database/

'engine' => 'InnoDB'

默认:

'mysql' => [
                'driver' => 'mysql','url' => env('DATABASE_URL'),'host' => env('DB_HOST','127.0.0.1'),'port' => env('DB_PORT','3306'),'database' => env('DB_DATABASE','forge'),'username' => env('DB_USERNAME','password' => env('DB_PASSWORD',''),'unix_socket' => env('DB_SOCKET','charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci','prefix' => '','prefix_indexes' => true,'strict' => true,'engine' => null,'options' => extension_loaded('pdo_mysql') ? array_filter([
                    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),]) : [],],

更新:

'mysql' => [
            'driver' => 'mysql','engine' => 'InnoDB','options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。