Save or update pivot table data with additional column in Laravel

Sometimes we have to save or update pivot table data with additional column in Laravel because of unique combination of values in table. Here we have code snippet which helps you to create a record in pivot table if record is not exists in table or update records if exists in it.

Answers 4
  • Create if not exists and update record if exists in pivot table with extra column using attach and updateExistingPivot method in Laravel

    --PATH routes\web.php
    Route::get('/save-or-update-pivot-table-record', function(){
        $user = App\Models\User::find(1);
        $project = App\Models\Project::find(1);
    
        if (!$user->projects->contains($project->id)) {
            $user->projects()->attach($project->id, ['is_manager'=> 1]) ;
        }else{
            $user->projects()->updateExistingPivot($project->id, ['is_manager'=> 0]);
        }
    });
    
    0

    This code snippet will help you to create a record in pivot table with extra column if record is not already exists in it and update record if exists in pivot table.

     

    Projects method with belongsToMany relation

    app\Models\User.php

    public function projects(){
        return $this->belongsToMany('App\Models\Project')
                    ->withPivot('is_manager')
                    ->withTimestamps();
    }
  • Create if not exists and update record if exists in pivot table with additional column using sync method

    --PATH routes\web.php
    Route::get('/save-or-update-pivot-table-record', function(){
        $user = App\Models\User::find(1);
        $project = App\Models\Project::find(1);
        $user->projects()->sync([$project->id => ['is_manager'=> 1]], false);
    });
    
    0

    This code snippet will help you to create a new record if the record is not already exist in pivot table else it will update the existing record from table.

  • Create project table with model and migration

    // Create project model with migration 
    php artisan make:model Project --migration
    
    // Add columns to project migration file under - database\migrations\<2021_04_21_125826>_create_projects_table.php
    Schema::create('projects', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->timestamps();
    });
    
    // Run migrate command to create table structure
    php artisan migrate
    
    0

    First you have to run artisan command with php artisan make:model Project --migration. This command will create a model and migration for your table structure. After that you can add columns to the migration file and run the php artisan migrate command.

  • Create pivot table in laravel with multiple columns

    --PATH database\migrations\<yourmigrationfile>.php
    //Migration command to create migration file
    php artisan make:migration create_project_user_table --create=project_user
    
    //Migration file code under - database\migrations\<yourmigrationfile>.php
    public function up(){
        Schema::create('project_user', function (Blueprint $table) {
            $table->foreignId('project_id')->constrained();
            $table->foreignId('user_id')->constrained();
            $table->boolean('is_manager')->default(false);
            $table->timestamps();
        });
    }
    
    0

    You can add multiple columns in the laravel pivot table using migration. This code snippet adds is_manager columns in the pivot table with default value false and adds created_at and updated_at fields using timestamps method.

  • Back to code snippet queries related laravel

Related queries helps you to understand and may also used for implementation of current code snippet