我有这个表电影( with movie_id )和表参与者( actor_id ),它们都连接到表电影演员,其中包含E 110参与者_id<代码>E 211 PK FK和E 112电影_id<代码>E 213 PK FK。
当我尝试运行时,我在Visual代码中获得了这个eror:php迁移:
SQLSTATE42000:语法错误或访问冲突: 1064您的SQL语法出现了错误;请检查与MariaDB服务器版本对应的手册,以获得在第1行(SQL: create ()默认字符集utf8mb4排序规则‘utf8mb4_unicode_ci ')上使用的正确语法,以获得使用utf8mb4默认字符集“utf8mb4_unicode_ci”的正确语法。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActorsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('actors', function (Blueprint $table) {
$table->id('actor_id');
$table->string('first_name',100);
$table->string('last_name',100);
});
Schema::create('movie_actor', function (Blueprint $table) {
$table->foreign('actor_id')->references('actor_id')->on('actors');
$table->foreign('movie_id')->references('movie_id')->on('movies');
$table->primary(['actor_id','movie_id']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('actors');
Schema::dropIfExists('movie_actor');
}
}发布于 2021-12-06 18:00:40
movie_actor中没有定义任何列。
如果希望同时创建列,然后将其设置为外键,请使用foreignId而不是foreign,但请检查医生们是否有正确的语法,因为它不完全相同。就你而言:
Schema::create('movie_actor', function (Blueprint $table) {
$table->foreignId('actor_id')->constrained();
$table->foreignId('movie_id')->constrained();
$table->primary(['actor_id','movie_id']);
});这将自动确定正确的表名和id名,前提是您遵循这些约定。
注意:您可以使用constrained('table_name', 'primary_key_name')精确地指定表和主键名应该是什么。
https://stackoverflow.com/questions/70249538
复制相似问题