在laravel迁移脚本中删除测试数据

时间:2016-01-08 20:59:10

标签: laravel laravel-seeding

我正在尝试清理生产表中的测试数据。在简单的环境中,我可以编写一个脚本来清理测试数据,但我想知道如何在laravel迁移脚本中执行相同的操作

我有一个测试用户正在制作并希望清理数据库中生成的所有相关记录。在种子文件中,我可以根据电子邮件地址获取学生ID,然后根据ID删除课程和其他信息。我不知道这听起来像是一种拉拉的做法!

studentId = 101

他参加了三门课程 他有出勤记录 他有通讯记录

现在我想根据他的emailId获取学生ID 然后想要从课程,考勤,沟通表中删除记录 最后从学生表中删除id

我在做

$sdetail = student::where('email','some@test.com')->first();
echo "you are checking fir: ".$sdetail ->id;
$classes= class::where('studentId',"$sdetail->id")->get();
foreach($classes as $class)
{
    echo $class->name;   //print only one record I have three rec!
    DB::table('courses')->where("id",$class->id)->delete();
}

任何想法都可以解决这个问题!

3 个答案:

答案 0 :(得分:3)

您可以在迁移中运行模型功能 - 您只需要将模型包含在顶部。

use App\ModelName

class RemoveTestData extends Migration {

    public function up(){

        ModelName::where('id', $ID)->first()->delete();

    }

    public function down(){

        ModelName::create([
            //Test Data
        ]);

    }

答案 1 :(得分:1)

您可以在迁移中使用truncate()功能删除所有行并重置任何自动增量字段。

Schema::table('table_name', function($table)
{
    $table->truncate();
});

https://laravel.com/docs/5.1/queries#deletes

答案 2 :(得分:0)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

use App\Models\settings;

class ChangeCreateSettingsInsert extends Migration
{
  public function up()
  {
    settings::create([
        "product_id" => 1           
    ]);
  }

  public function down()
  {
    settings::where('product_id',1)->delete();
  }
}