Fernando
Fernando

Reputation: 411

Why do the values in my model not update in the database?

I am going to insert and update values using my addpermission function in my Controller

public function addPermission(Request $request, $id, $permission = null) 
{
  $this->validate($request, [
    'status'   => 'required'
  ]);

  if(is_null($permission)) {
    $permission = new Permission;
    $msg = 'Permission has been added to your Collaborator successfully';
  } else {
    $permission = Permission::findOrFail($permission,['id'])->id;
    $msg = 'Permission updated successfully';
  }

  $permission->status = $request->input('status');
  $permission->project_id       = $id;
  $permission->collaborator_id =  $request->input('cid');
  $permission->save();
  return redirect()->back()->with('info', $msg);
}

My routes

Route::post('projects/{project_id}/permission', [
    'uses' => 'ProjectCollaboratorsController@addPermission',
    'as'   => 'projects.collaborators.permission',
  //  'middleware' => ['auth']
]);

Data insert works properly, but update doesn't work.
When I click button to update it is inserts as new record to the database.

My table name is permission and have the following columns

What do I need to change to make the updating work?

Upvotes: 1

Views: 69

Answers (3)

CUGreen
CUGreen

Reputation: 3186

I think you may need to put an optional route parameter in for permission id.

Route::post('projects/{project_id}/permission/{permission_id?}', [
    'uses' => 'ProjectCollaboratorsController@addPermission',
    'as'   => 'projects.collaborators.permission',
  //  'middleware' => ['auth']
]);

Upvotes: 0

Jahid Mahmud
Jahid Mahmud

Reputation: 1136

You should write this. Hopefully This will solve your problem

public function addPermission(Request $request, $id, $permission) 
{
  $this->validate($request, [
    'status'   => 'required'
  ]);
  $per = Permission::where('id', $permission)->first();

  if(is_null($permission)) {
    $permission = new Permission;
    $msg = 'Permission has been added to your Collaborator successfully';
  } else {
    $permission = Permission::findOrFail($per)->id;
    $msg = 'Permission updated successfully';
  }

  $permission->status = $request->input('status');
  $permission->project_id       = $id;
  $permission->collaborator_id =  $request->input('cid');
  $permission->save();
  return redirect()->back()->with('info', $msg);
}

Upvotes: 0

Vineesh
Vineesh

Reputation: 467

I see an error in this line, this should return the permission object not the id of permission.

$permission = Permission::findOrFail($permission,['id'])->id; Change to, $permission = Permission::findOrFail($permission['id']);

Upvotes: 1

Related Questions