Как создать триггер, который перед обновлением столбца в таблице сохраняет всю старую строку в новую таблицу? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть таблица team_members со следующей структурой, где обновляется только project_request_id.Я создал log_team_members с той же структурой данных, поэтому всякий раз, когда я обновляю team_members, я теряю старые данные, которые мне нужны для чтения, поэтому я думал о создании trigger, который before updating team_members project_request_id, он сохраняет все old row к этой таблице.

Можете ли вы помочь мне построить этот триггер из миграции Latavel?

public function up()
{
    Schema::create('team_members', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('title');
        $table->string('picture');
        $table->string('email')->unique();
        $table->string('phone_number');
        $table->text('background_information')->nullable();
        $table->timestamps();
        $table->integer('project_request_id')->unsigned();
        $table->foreign('project_request_id')->references('id')->on('project_requests')->onDelete('cascade');
    });
}

public function up()
{
    Schema::create('team_members', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('title');
        $table->string('picture');
        $table->string('email')->unique();
        $table->string('phone_number');
        $table->text('background_information')->nullable();
        $table->timestamps();
        $table->integer('project_request_id')->unsigned();
        $table->foreign('project_request_id')->references('id')->on('project_requests')->onDelete('cascade');
    });
}

И вот где происходит обновление team_members:

public function createProjectTeam(Request $request){
            try {
                $projectRequest = 
ProjectRequest::create(['project_title' => $request->projectTitle, 
'client_id' => $request->projectClientId]);

                TeamMember::whereIn('email', $request->projectTeamEmails)
                ->update([
                    'project_request_id' => $projectRequest->id 
                ]);

                $projectTeam = TeamMember::where('project_request_id', $projectRequest->id)->get();

            return response()->json( [
                'success'=> true,
                'projectRequest' => $projectRequest,
                'projectTeam' => $projectTeam,
            ]);

            } catch(\Exception $e){
                return ['success' => false, 'message' => 'project team creation failed'];
            }

        }

1 Ответ

0 голосов
/ 30 апреля 2019
// use DB; 
$data = UpdateModelName::find(1);
$copy = $data->replicate()->toArray();
// store data in new table
$newTable = new NewTableModel;
$newTable->insert($copy);
...