2016-05-26 4 views
1

Для моих сеялок я хочу урезать свои таблицы, к сожалению, есть некоторые ограничения по внешним ключам, и, кроме того, есть некоторые, у которых есть мягкие удаления.Как переопределить мягкие удаления в пределах laravel

Чтобы обойти неспособность обрезать таблицу на основе мягких удалений, я просто говорю foreach Model :: all() удалить эту модель. Может быть, есть лучший способ? Однако для таблиц с мягкими удалениями это фактически не удаляет запись. Как обойти мягкие удаления, когда я действительно хочу удалить запись?

ответ

3

Вам нужно forceDelete метод

Model::where('condition')->where('may be other condition')->forceDelete(); 

или на конкретной модели, например:

$modelInstance = Model::find($id); 
$modelInstance->forceDelete(); 
1

Установить заявление, чтобы отключить внешнюю проверку и модель караул на вашем DatabaseSeeder.php:

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     Model::unguard(); 

     // Disable foreign key check for this connection before running seeders 
     DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 

     $this->call(UserTableSeeder::class); 

     // Enable foreign check after seeding. 
     DB::statement('SET FOREIGN_KEY_CHECKS=1;'); 

     Model::reguard(); 
    } 
} 

и заставить удалить мягкую удаляющие модели использования $model->forceDelete() вместо $model->delete().

1

Вот что я обычно делаю:

В моей миграции файл

public function run() { 
    DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 
    DB::table('users')->truncate(); 

    // Create the table structure 

    DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 

    } 

Это в основном заставить падение таблицы игнорируя ограничения внешнего ключа.