【发布时间】:2015-03-02 12:57:32
【问题描述】:
我有两个表,即交易和付款,它们在过去的迁移中已经存在。当我尝试在它们之间创建一个数据透视表时,我收到了仅交易外键的错误。 “付款”表上的另一个外键创建得很好。这绝对让我感到困惑,我之前发现的关于这个错误的讨论都没有解决这个问题。
错误(供参考,MAccounting 是数据库的名称):
[照亮\数据库\查询异常] SQLSTATE [HY000]:一般错误:1005 无法创建表 'MRAccounting.#sql- 563_2d7' (errno: 150) (SQL: alter table `payment_transaction` 添加约束 t payment_transaction_transaction_id_foreign外键(`transaction_id`) 引用`事务`(`id`))*尽管错误似乎在说什么,payment_transaction 表已成功创建,还有payments 表的外键;唯一破坏的是交易的外键。
交易表:
使用 Illuminate\Database\Migrations\Migration; 使用 Illuminate\Database\Schema\Blueprint; 类 CreateTransactionsTable 扩展迁移 { /** * 运行迁移。 * * @return 无效 */ 公共函数 up() { Schema::create('transactions', function(Blueprint $table) { $table->increments('id'); $table->string('name'); $table->decimal('余额', 7,2); $table->integer('account_id'); $table->integer('pending_id'); $table->timestamps(); }); } /** * 逆转迁移。 * * @return 无效 */ 公共函数向下() { Schema::drop('transactions'); } }付款表:
使用 Illuminate\Database\Migrations\Migration; 使用 Illuminate\Database\Schema\Blueprint; 类 CreatePaymentsTable 扩展迁移 { /** * 运行迁移。 * * @return 无效 */ 公共函数 up() { Schema::create('payments', function(Blueprint $table) { $table->increments('id'); $table->integer('account_to'); $table->integer('account_from'); $table->decimal('金额',7,2); $table->timestamps(); }); } /** * 逆转迁移。 * * @return 无效 */ 公共函数向下() { Schema::drop('payments'); } }数据透视表:
使用 Illuminate\Database\Migrations\Migration; 使用 Illuminate\Database\Schema\Blueprint; 类 CreatePaymentTransactionTable 扩展迁移 { /** * 运行迁移。 * * @return 无效 */ 公共函数 up() { Schema::create('payment_transaction', function(Blueprint $table) { $table->increments('id'); $table->unsignedInteger('payment_id'); $table->unsignedInteger('transaction_id'); $table->timestamps(); // $table->foreign('payment_id')->references('id')->on('payments'); // $table->foreign('transaction_id')->references('id')->on('transactions'); }); Schema::table('payment_transaction', function(Blueprint $table){ $table->foreign('payment_id')->references('id')->on('payments'); $table->foreign('transaction_id')->references('id')->on('transactions'); }); } /** * 逆转迁移。 * * @return 无效 */ 公共函数向下() { Schema::drop('payment_transaction'); } }************************ 得到它的工作,但我仍然需要弄清楚这是怎么发生的 ******** 不幸的是,全新安装解决了这个问题。这很好,花花公子,我现在可以继续开发,但是像这样进行干净安装并不一定是我在生产环境中的便利。我需要弄清楚是什么导致了这个/如何重新创建它。
【问题讨论】:
-
我怀疑其他一些迁移存在错误,因为这些迁移对我来说效果很好,并且它说它无法创建表
MRAccounting。检查该表的迁移,也许? -
MRAccounting 是数据库的名称(我已经在问题中添加了一个注释) - 我认为它说它无法创建表的原因是它假设这就是发生的事情当它实际收到未能创建外键约束的错误时。然而,有趣的是,全新安装对您有用。
标签: php laravel database-migration