【发布时间】:2017-10-15 14:27:08
【问题描述】:
我正在尝试学习一对一的关系。我正在使用 Laravel 5.5.13。
我的简单应用是这样的:
我创建了一个App\Message。我可以选择将App\Task 与它关联。
我的目标:
- 一旦关联了
App\Task,如果任务被删除,它应该级联删除App\Message行。 - 反之,如果
App\Message被删除,它应该级联删除App\Task行。
但是我在迁移时遇到错误,因为tasks_table 是在messages_table 之后创建的。
这是我的迁移:
2017_10_15_021803_create_messages_table.php:
public function up()
{
Schema::create('messages', function (Blueprint $table) {
$table->increments('id');
$table->integer('task_id')->unsigned()->nullable();
$table->text('body');
$table->timestamps();
$table->foreign('task_id')->references('id')->on('tasks')->onDelete('cascade'); //// IF I COMMENT THIS OUT THE MIGRATION WORKS, BUT I NEED THIS IN
});
}
对于App\Task2017_10_15_023343_create_tasks_table.php:
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->integer('message_id')->unsigned();
$table->timestamps();
$table->foreign('message_id')->references('id')->on('messages')->onDelete('cascade');
});
}
如果我注释掉$table->foreign('task_id')->references('id')->on('tasks')->onDelete('cascade');,那么迁移工作,但我需要在删除任务时删除消息,并且没有这一行就不会发生。
我运行php artisan migrate后得到的错误是:
[照亮\数据库\查询异常] SQLSTATE[HY000]: 一般错误: 1005 Can't create table
petfolk.#sql-42e8_16f(errno: 150 "外键约束格式不正确") (SQL: alter tablemessagesadd constraintmessages_task_id_foreignforeign key (task_id) 在删除集上引用tasks(id) 为空)[PDO异常] SQLSTATE[HY000]: 一般错误: 1005 无法创建表
petfolk.#sql-42e8_16f(errno: 150 "外键约束格式不正确")
【问题讨论】:
-
你得到什么错误?
-
感谢@OmarTarek 的快速回复和提醒!我添加了错误信息。谢谢!
标签: laravel laravel-5.5