удалить тестовые данные в сценарии миграции laravel

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

У меня есть тестовый пользователь на производстве, и я хочу очистить все связанные записи, созданные в базе данных. В исходном файле я могу получить идентификатор студента на основе адреса электронной почты, а затем удалить курсы и другую информацию на основе идентификатора? Я не знаю, звучит ли это как способ работы laravel!

идентификатор студента = 101

Он зачислен на три курса У него есть записи о посещаемости У него есть записи об общении

Теперь я хочу получить идентификатор студента на основе его идентификатора электронной почты, затем хочу удалить записи из курсов, посещаемости, таблицы связи и, наконец, удалить идентификатор из таблицы студентов.

я делаю

$sdetail = student::where('email','[email protected]')->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();
}

любая идея исправить это!


person user269867    schedule 08.01.2016    source источник
comment
Решение состоит в том, чтобы написать DB::Raw(запросы к базе данных).. чтобы написать сценарий очистки тестовых данных.   -  person user269867    schedule 20.01.2016


Ответы (2)


Вы можете запускать функции модели в рамках миграции — вам просто нужно включить модель вверху.

use App\ModelName

class RemoveTestData extends Migration {

    public function up(){

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

    }

    public function down(){

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

    }
person Dan Johnson    schedule 08.01.2016

Вы можете использовать функцию truncate() в миграции, чтобы удалить все строки и сбросить все поля автоинкремента.

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

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

person Dan Johnson    schedule 08.01.2016
comment
Я хочу удалить только набор записей тестовых данных, а не всю таблицу в моей производственной среде. - person user269867; 09.01.2016
comment
Приносим извинения за непонимание. У вас есть модель, настроенная для таблицы, которую вы хотите изменить? - person Dan Johnson; 09.01.2016
comment
Да, классы моделей определены для всех таблиц - person user269867; 09.01.2016