Search code examples
laravelmany-to-manylaravel-5.5

Laravel wherePivot with sync method not working


I am trying to sync data but error occur.

SQLSTATE[HY000]: General error: 1364 Field 'model_type' doesn't have a default value (SQL: insert into model_has_roles (dealer, dealership_id, model_id, role_id) values (1, 61, 85, 13))

// controller code

$user = User::findOrFail($id);
        $user->first_name = $request->get('first_name');
        $user->last_name = $request->get('last_name');
        $user->phone = $request->get('phone_no');
        $user->title = $request->get('title');
        $user->mobile = $request->get('mobile');
        $user->save();

        $user->dealerRoles()->wherePivot('dealership_id', session('dealership_id'))->sync([$request->get('role_id') => ['dealer' => true, 'dealership_id' => session('dealership_id')]]);

// User Model

public function dealerRoles()
{
    return $this->belongsToMany(Role::class, 'model_has_roles', 'model_id', 'role_id');
}

Solution

  • You need to add to sync method

    $user->dealerRoles()
                  ->wherePivot('dealership_id', session('dealership_id'))
                      ->sync([
                           $request->get('role_id') => [ 
                                'model_type' => 1, 
                                'dealer' => true, 
                                'dealership_id' => session('dealership_id')
                       ]
            ]);