问题描述
我正在使用 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'),