无法在迁移时分离关系:使用Laravel / Eloquent ORM重置

时间:2014-08-11 09:49:02

标签: orm laravel-4 relational-database eloquent migrate

我已经设法在Laravel中获得了Eloquent ORM,关系不错,但在删除相关表之前将它们分离是非常困难的,我不认为我做得对,因为我得到了遵循以下两个错误。

errors returned after running "php artisan migrate:reset" command

我用谷歌搜索它几乎没有结束,大多数来源互相提供不同的方法,这不是很有帮助。下面是我正在尝试的当前方法,这与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();
     }
}
}

1 个答案:

答案 0 :(得分:0)

在进行迁移之前,我已设法通过手动删除迁移文件dump-autoload并从数据库中删除数据透视表来删除它们:refresh。相反,我现在通过模型创建关系,使用Eloquent的hasMany,hasOne等等方法。似乎是创建模式关系的更安全且通常更广泛接受的做法。