无法在迁移时分离关系:使用Laravel/Eloquent ORM重置
我已经成功地在Laravel中建立了雄辩的ORM关系,但是在删除相关表之前分离它们是非常困难的,我不认为我做得对,因为我得到了以下两个错误,如下所述 我在谷歌上搜索到了几乎无穷无尽的信息,大多数信息来源都给出了不同的方法,这并没有多大帮助。下面是我正在尝试的当前方法,它与官方Laravel网站上的文档一致--我知道文档只给出了一个分离一个模型的单个实例的示例,这就是为什么我将它放在foreach循环中无法在迁移时分离关系:使用Laravel/Eloquent ORM重置,orm,laravel-4,relational-database,eloquent,migrate,Orm,Laravel 4,Relational Database,Eloquent,Migrate,我已经成功地在Laravel中建立了雄辩的ORM关系,但是在删除相关表之前分离它们是非常困难的,我不认为我做得对,因为我得到了以下两个错误,如下所述 我在谷歌上搜索到了几乎无穷无尽的信息,大多数信息来源都给出了不同的方法,这并没有多大帮助。下面是我正在尝试的当前方法,它与官方Laravel网站上的文档一致--我知道文档只给出了一个分离一个模型的单个实例的示例,这就是为什么我将它放在foreach循环中 在执行migrate:refresh之前,我通过手动删除迁移文件、转储自动加载并从数据库中删
在执行migrate:refresh之前,我通过手动删除迁移文件、转储自动加载并从数据库中删除pivot表来删除它们。相反,我现在通过模型创建关系,使用Eloquent的hasMany、hasOne等方法。似乎是创建模式关系的更安全、更普遍接受的做法。可能不是问题所在,但您似乎只是在分离关系,而不是在下拉列表中实际删除表?您只是想删除表吗?
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTableRelationships extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up() {
Schema::table(
'users', function ($table) {
$table->foreign('avatar')->references('id')->on('uploads')->onUpdate('cascade')->onDelete('cascade');
}
);
Schema::table(
'organisations', function ($table) {
$table->foreign('owner')->references('id')->on('users')->onUpdate('cascade');
$table->foreign('logo')->references('id')->on('uploads')->onUpdate('cascade');
}
);
Schema::table(
'groups', function ($table) {
$table->foreign('organisation')->references('id')->on('organisations')->onUpdate('cascade');
$table->foreign('owner')->references('id')->on('users')->onUpdate('cascade');
$table->foreign('logo')->references('id')->on('uploads')->onUpdate('cascade');
}
);
Schema::table(
'uploads', function ($table) {
$table->foreign('uploaded_by')->references('id')->on('users')->onUpdate('cascade');
}
);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down() {
foreach(User::all as $thisUser) {
$thisUser->avatar()->detach();
$thisUser->save();
}
foreach(Organisation::all as $thisOrganisation) {
$thisOrganisation->owner()->detach();
$thisOrganisation->logo()->detach();
$thisOrganisation->save();
}
foreach(Group::all as $thisGroup) {
$thisGroup->organisation()->detach();
$thisGroup->owner()->detach();
$thisGroup->logo()->detach();
$thisGroup->save();
}
foreach(Upload::all as $thisUpload) {
$thisUpload->uploaded_by()->detach();
$thisUpload->save();
}
}
}