对我来说,描述我的问题的最佳方法是该链接;
我的问题正是这个,解决方案实际上正在工作,但就我而言,这不是我的一个解决方案,要么我将为我找到替代解决方案,要么我的架构构建器做错了什么,我需要更好地理解它
我的代码基本上是这样的:
//just an example, not my code
Schema A (as)
//other code, such as table->increments('id')
$table->unsignedInteger('b_id');
$table->unsignedInteger('c_id');
$table->foreign('b_id')->references('id')->on('bs');
$table->foreign('c_id')->references('id')->on('cs');
Schema B (bs)
$table->unsignedInteger('a_id');
$table->unsignedInteger('c_id');
$table->foreign('a_id')->references('id')->on('as');
$table->foreign('c_id')->references('id')->on('cs');
Schema C (cs)
$table->unsignedInteger('a_id');
$table->unsignedInteger('b_id');
$table->foreign('a_id')->references('id')->on('as');
$table->foreign('b_id')->references('id')->on('bs');
因此,这两个命令都无法帮助我解决此问题。
我的案子是否有解决方案,或者我的代码/方案逻辑错误,需要修改我的代码?
答案 0 :(得分:2)
您的架构不正确。您不能让表相互依赖,也就是说,它们不能同时成为彼此的主从。这样,您根本无法制作它们。
您应该首先创建主表,例如A
,B
,C
。
架构A:
$table->increments('id');
// some other columns
架构B:
$table->increments('id');
// some other columns
架构C:
$table->increments('id');
// some other columns
架构AS:
$table->unsignedInteger('b_id');
$table->unsignedInteger('c_id');
$table->foreign('b_id')->references('id')->on('B');
$table->foreign('c_id')->references('id')->on('C');
架构BS:
$table->unsignedInteger('a_id');
$table->unsignedInteger('c_id');
$table->foreign('a_id')->references('id')->on('A');
$table->foreign('c_id')->references('id')->on('C');
架构CS:
$table->unsignedInteger('a_id');
$table->unsignedInteger('b_id');
$table->foreign('a_id')->references('id')->on('A');
$table->foreign('b_id')->references('id')->on('B');
答案 1 :(得分:0)
在Laravel> = 5.0 中,实现此目标的一种方法是在正确命名的迁移文件夹中包含某些脚本。就像我以前在Sprint中进行迁移一样。
--migrations/
---Sprint8/
------user_table.php
------car_table.php
--Sprint9/
------complaint_table.php
------supervisor_table.php
使用这种方法,必须在每个子文件夹上运行迁移命令:
php artisan migrate --path=/database/migrations/Sprint8
php artisan migrate --path=/database/migrations/Sprint9
但是,您可以做的就是轻松扩展artisan系统以编写自己的迁移命令,该命令将遍历migrations文件夹下的所有文件夹,为您创建并运行这些命令。
如果您不想通过artisan进行操作,也可以直接编写一个shell脚本