如何解决Laravel8 不会对迁移创建外键约束
我正在使用 Laravel8。我有两个表 contact_lists
和 contacts
我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 举报,一经查实,本站将立刻删除。