2017-10-23 10 views
1

laravel 5.5を使用してエントリを更新しています。問題は、プライマリキー 'id'を変更した後で、これはelequoentのデフォルトのpkを 'project_id'に変更したことです。アイテムを追加するとうまくいきますが、アイテムの更新が正しく機能していません。ここに私が得ているエラーがあります。Laravel 5.5プライマリキーが変更されたエントリを更新すると、メソッドの保存が存在しません

メソッドの保存が存在しません。ここで

私のモデルです。

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Project extends Model 
{ 
    protected $primaryKey = 'project_id'; 
    public function user() 
    { 
     return $this->belongsTo(User::class); 
    } 
    public function tasks() 
    { 
     return $this->hasMany(Task::class); 
    } 
} 

ここは私のコントローラ機能です。 get()戻りcollectionを使用して

public function editProject($id){ 

     $project = Project::where('project_id', $id)->firstOrFail(); 
     $data = ["project_info" => $project]; 
     //die(print_r($data)); 
     return view('projects.edit')->with($data); 
    } 
    public function updateProject(Request $request){ 
     //die(print_r($request)); 
     $data = $request->all(); 
     $validator = Validator::make($data, [ 
      'project_title' => 'required', 
      'project_description' => 'required', 
      'project_start_date' => 'required', 
      'project_end_date' => 'required', 
      'project_status' => 'required', 
     ]); 

     $response = []; 

     if ($validator->fails()){ 
      $response["errors"] = [$validator->messages()->first()]; 
      $response["success"] = false; 
      return json_encode($response); 
     } 

     else{ 
      $project = Project::where("project_id", $request->input('project_id'))->get(); 
      //die(print_r($project)); 
      //$project->id = $request->project_id; 
      $project->project_title = $request->project_title; 
      $project->user_id = Session::get('user_id'); 
      $project->project_description = $request->project_description; 
      $project->project_start_date = $request->project_start_date; 
      $project->project_end_date = $request->project_end_date; 
      $project->project_status = $request->project_status; 
      $project->save(); 
      return redirect('/listProjects'); 
     } 
    } 

答えて

1

は、私が見つけた解決策です。

$project_id = $request->input('project_id'); 
$project = Project::find($project_id); 
$project->save(); 
3

。あなたが 'ユニークな' IDであるproject_idを渡しているにもかかわらず、コレクションはまだ返されます - コレクションには要素が1つだけ含まれています。

その後、あなたのコードは、あなたが$project参照コレクション内の最初の要素を作るためにいくつかの変更なしに経験した、または少なくともしていないと動作しません。

それはクイックフィックスはしかし、ちょうどこれを変更しています:

$project = Project::where("project_id", $request->input('project_id'))->get(); 

をこれに:

$project = Project::where("project_id", $request->input('project_id'))->first(); 

first()を使用することにより、雄弁は、クエリに一致する最初の要素を返し、実際の要素を返します(1つの要素を持つコレクションとは対照的に)、直接編集して保存することができます。ここで

関連する問題