我已经设法在Laravel中获得了Eloquent ORM,关系不错,但在删除相关表之前将它们分离是非常困难的,我不认为我做得对,因为我得到了遵循以下两个错误。
我用谷歌搜索它几乎没有结束,大多数来源互相提供不同的方法,这不是很有帮助。下面是我正在尝试的当前方法,这与Laravel官方网站上的文档一致 - http://laravel.com/docs/eloquent#relationships - 我知道文档只提供了一个示例来分离一个模型的单个实例,这就是为什么我'把它放在一个foreach循环中。
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();
}
}
}
答案 0 :(得分:0)
在进行迁移之前,我已设法通过手动删除迁移文件dump-autoload并从数据库中删除数据透视表来删除它们:refresh。相反,我现在通过模型创建关系,使用Eloquent的hasMany,hasOne等等方法。似乎是创建模式关系的更安全且通常更广泛接受的做法。