提问者:小点点

update替换laravel中的所有列


我正在传递post对象以更新我的帖子。。。 令我惊讶的是,当我试图编辑一个帖子时,所有的帖子都被替换为我在尝试编辑时输入的编辑值(图像或文本)。

 public function update(Post $id)
{
    
$data = request()->validate([
    'about' => 'required',
    'image' => '',

  ]);

  if(request('image')){
    $imagePath = request('image')->store('uploads','public');
    $image = Image::make(public_path("storage/{$imagePath}"))->fit(500,500);
  
    $image->save();

    $imageArray = ['image' => $imagePath];

  }
  auth()->user()->posts()->update(array_merge( $data, $imageArray ?? [] ) );
  $user = Auth::guard('web')->id() ;
  
  return redirect()->route('home',['user'=>$user]);
}
    Route::get('/post/edit/{post}', 'PostController@edit')->name('post.edit'); 

Route::patch('/p/update/{id}', 'PostController@update')->name('post.update');

共1个答案

匿名用户

您的代码将更新此经过身份验证的用户的所有文章。

要解决此问题:

Route::get('/post/edit/{post}', 'PostController@edit')->name('post.edit'); 

Route::patch('/post/edit/{post}', 'PostController@update')->name('post.update');

在您的控制器中

public function update(Post $post){
    
     // validation code here

     // image upload code

    // update your database

    $post->update([

        //update database fields

     ]);
  
  return redirect('home');
}