我的 php artisan 迁移发生了啥
Posted
技术标签:
【中文标题】我的 php artisan 迁移发生了啥【英文标题】:what's happened with my php artisan migrate我的 php artisan 迁移发生了什么 【发布时间】:2015-09-21 10:47:20 【问题描述】:[照亮\数据库\查询异常]
SQLSTATE [42000]:语法错误或访问冲突:1064 你有一个错误我
n 你的 SQL 语法;检查与您的 mysql 服务器相对应的手册 v
在更新 casc 上删除级联时使用正确语法的版本
ade' 在第 1 行(SQL:alter table users
添加约束 users_address_id_fo
在删除级联上统治外键(address_id
)引用address
()
在更新级联上)
[PDO异常] SQLSTATE [42000]:语法错误或访问冲突:1064 你有一个错误我 n 你的 SQL 语法;检查与您的 MySQL 服务器相对应的手册 v 在更新 casc 上删除级联时使用正确语法的版本 ade' 在第 1 行
迁移 [--bench[="..."]] [--database[="..."]] [--force] [--path[="..."]] [- -pac kage[="..."]] [--pretend] [--seed]
public function up()
Schema::create('users',function($table)
$table->increments('id');
$table->string('name',30);
$table->string('phone',11);
$table->integer('age');
$table->string('email',50);
$table->string('marry_status',10);
$table->integer('address_id');
$table->foreign('address_id')->reference('id')->on('address')->onDelete('cascade')->onUpdate('cascade');
$table->integer('points_id');
$table->foreign('points_id')->reference('id')->on('address')->onDelete('cascade')->onUpdate('cascade');
$table->timestamps();
);
php 迁移 --pretend
CreateUsersTable: create table `users` (`id` int unsigned not null auto_increment primary key, `name` varchar(30) not null, `phone` varchar(11) not null, `age` int not null, `email` varchar(50) not null, `marry_status` varchar(10) not null, `address_id` int not null, `points_id` int not null, `created_at` timestamp default 0 not null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci
CreateUsersTable: alter table `users` add constraint users_address_id_foreign foreign key (`address_id`) references `address` () on delete cascade on update cascade
CreateUsersTable: alter table `users` add constraint users_points_id_foreign foreign key (`points_id`) references `address` () on delete cascade on update cascade
CreateAddressTable: create table `address` (`id` int unsigned not null auto_increment primary key, `users_id` int not null, `name` varchar(30) not null, `created_at` timestamp default 0 not null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci
CreatePointsTable: create table `points` (`id` int unsigned not null auto_increment primary key, `point` int not null, `users_id` int not null, `created_at` timestamp default 0 not null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci
我尝试了,但我不好
public function up()
Schema::create('users',function($table)
$table->increments('id');
$table->string('name',30);
$table->string('phone',11);
$table->integer('age');
$table->string('email',50);
$table->string('marry_status',10);
$table->integer('address_id');
$table->integer('points_id');
$table->timestamps();
);
Schema::table('users',function($table)
$table->foreign('points_id')->references('id')->on('address')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('address_id')->references('id')->on('address')->onDelete('cascade')->onUpdate('cascade');
);
【问题讨论】:
运行带有--pretend
标志的migrate
命令并向我们展示输出。
@anh 您的问题下方有一个 edit 链接,使用它来修改问题并在此处包含命令的输出,不要在 cmets 中发布该信息.
请用这个输出更新你的问题。它将更具可读性。
@anh 你必须在一个完全独立的迁移文件中进行,该文件必须在创建所有表之后。
【参考方案1】:
您的语法有误。您正在使用reference()
方法,但正确的方法是references()
。修复它,我认为一切都会好起来的。
【讨论】:
@anh 发生这种情况是因为您正在尝试为尚不存在的表的列创建外键。查看--pretend
输出。在创建 address
和 points
表之前,您正在创建 2 个外键。将密钥的创建移到另一个迁移中,它将为您带来魅力。以上是关于我的 php artisan 迁移发生了啥的主要内容,如果未能解决你的问题,请参考以下文章
Laravel php artisan 迁移空数据库上的错误
如何在 laravel 中使用“php artisan migrate”迁移我的数据库
我无法在我的 docker compose 中进行 mysql php artisan 迁移。错误 SQLSTATE[HY000] [2002]