使用Heroku中的Laravel迁移到Postgres时出错
我正在与Laravel 5.6和Heroku一起使用Postgres数据库 我已经将我的应用程序上传到Heroku,登录表单正确地向我显示了它 迁移表时会出现以下问题:使用Heroku中的Laravel迁移到Postgres时出错,laravel,heroku,database-migration,heroku-postgres,Laravel,Heroku,Database Migration,Heroku Postgres,我正在与Laravel 5.6和Heroku一起使用Postgres数据库 我已经将我的应用程序上传到Heroku,登录表单正确地向我显示了它 迁移表时会出现以下问题: heroku运行php artisan migrate并使用heroku的Postgres,我正确地进行了所有配置,但在执行迁移时会发生这种情况: 在Connection.php第664行: SQLSTATE[42830]:无效外键:7错误:没有唯一的 约束匹配引用表“用户”的给定键(SQL: 更改表“sales”添加约束“sa
heroku运行php artisan migrate
并使用heroku的Postgres,我正确地进行了所有配置,但在执行迁移时会发生这种情况:
在Connection.php第664行:
SQLSTATE[42830]:无效外键:7错误:没有唯一的
约束匹配引用表“用户”的给定键(SQL:
更改表“sales”添加约束“sales\u user\u id\u foreign”外键
(“用户id”)指的是“用户id”)
在Connection.php第458行:
SQLSTATE[42830]:无效外键:7错误:没有唯一的
为引用的表“用户”匹配给定键的约束
奇怪的是,相同的本地迁移并没有给我带来任何问题(MySQL),但是带有Postgres的Heroku显示了错误
以下是我的用户和销售迁移:
用户:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->integer('id')->unsigned();
$table->foreign('id')->references('id')->on('people')->onDelete('cascade');
$table->string('user')->unique();
$table->string('password');
$table->boolean('state')->default(1);
$table->integer('idRole')->unsigned();
$table->foreign('idRole')->references('id')->on('roles');
$table->rememberToken();
//$table->timestamps();
});
}
销售:
我不知道为什么我在Heroku中会有这个错误,但所有的东西都在本地工作。如何修复此问题?这是因为表
users
上的id
列没有唯一约束。
您可以将id
列设置为自动增量,然后再次运行迁移:
用户
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
// Other codes
});
}
这是因为表
users
上的id
列没有唯一约束。
您可以将id
列设置为自动增量,然后再次运行迁移:
用户
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
// Other codes
});
}
奇怪的是,相同的本地迁移并没有给我带来任何问题(MySQL),但是带有Postgres的Heroku显示了错误
在开发和生产中使用相同的数据库软件总是一个好主意。MySQL和PostgreSQL并不是彼此的替代品,即使使用ORM和模式迁移工具也是如此。在某些情况下,一方肯定会高兴,另一方则不会
我怀疑如果你在Heroku上使用MySQL,你的问题就会消失。Heroku本身不提供MySQL,但有一些是您可以使用的。JawsDB和ClearDB都是流行的选项,或者如果您愿意,您可以在类似的主机上托管自己的MySQL数据库
您也可以在本地切换到Postgres,看看是否可以重现错误
奇怪的是,相同的本地迁移并没有给我带来任何问题(MySQL),但是带有Postgres的Heroku显示了错误
在开发和生产中使用相同的数据库软件总是一个好主意。MySQL和PostgreSQL并不是彼此的替代品,即使使用ORM和模式迁移工具也是如此。在某些情况下,一方肯定会高兴,另一方则不会
我怀疑如果你在Heroku上使用MySQL,你的问题就会消失。Heroku本身不提供MySQL,但有一些是您可以使用的。JawsDB和ClearDB都是流行的选项,或者如果您愿意,您可以在类似的主机上托管自己的MySQL数据库
您也可以在本地切换到Postgres,看看是否可以重现错误。谢谢您的回答。但我不需要你提供给我的ID,因为我是从“与人的关系”表中获取的。那么我该怎么办呢?但是您可以通过
Sale
表中的User\u id
建立User
和Sale
表之间的关系。顺便说一下,您需要确保表始终具有主键作为唯一约束。是的,这种关系是与用户ID建立的,在本地使用MySQL非常适合我。我不明白Postgres会发生什么,你在MySQL中使用的存储引擎是什么。是InnoDB吗?您的用户
表的问题是它可能有重复的ID。谢谢回答。但我不需要你提供给我的ID,因为我是从“与人的关系”表中获取的。那么我该怎么办呢?但是您可以通过Sale
表中的User\u id
建立User
和Sale
表之间的关系。顺便说一下,您需要确保表始终具有主键作为唯一约束。是的,这种关系是与用户ID建立的,在本地使用MySQL非常适合我。我不明白Postgres会发生什么,你在MySQL中使用的存储引擎是什么。是InnoDB吗?用户
表的问题是它可能有重复的ID