Request parameter not updated when stored. When this executes the job is stored without a job number but the $request contains the correct value for 'number_full'. What have I done wrong?
public function store(JobRequest $request)
{
$jobnumber = $this->getNextJobNumber();
$request->merge([ 'number_full' => $jobnumber ]);
$request->request->add(['display_name' => "{$request->number_full} {$request->title}"]);
$job = Job::Create(request()->all());
return redirect("/job/".$job->id );
}
try dd() out the $request->all() and request()->all() before the Create method and compare them first,
public function store(JobRequest $request)
{
$jobnumber = $this->getNextJobNumber();
$request->merge([ 'number_full' => $jobnumber ]);
$request->request->add(['display_name' => "{$request->number_full} {$request->title}"]);
//dd($request->all());
dd(request()->all());
$job = Job::create(request()->all());
return redirect("/job/".$job->id );
}
instead 'Create' it should be 'create'
make sure number_full is fillable in the model
Rather than merging the request, you can use a simple +
public function store(JobRequest $request)
{
$jobnumber = $this->getNextJobNumber();
$job = Job::create(request()->all() +
['number_full'=> $jobnumber,
'display_name' =>"{$request->number_full} {$request->title}"
]);
return redirect("/job/".$job->id );
}
but beware, you have a race condition. I don't know how you resolve getNextJobNumber but there is a point where you have the next number but before saving this record, someone else also asks for the 'next' number and gets the same one.
None of these helped, thank you. It has something to do with the JobRequest, I changed it back to 'Request' to bypass validation and all worked fine. "create(request()->all()" must pull from request object. (newbie)
I found the following workedwith the JobRequest but it does not look very tidy.
$job = Job::create(request()->merge([ 'number_full' => $jobnumber ])->all());
public function store(JobRequest $request)
{
$jobnumber = $this->getNextJobNumber();
$job = Job::create($request->all() +
['number_full'=> $jobnumber,
'display_name' =>"{$request->number_full} {$request->title}"
]);
return redirect("/job/".$job->id );
}
End of the query use get() because all is used for get everything in a model without any condition or query
$job = Job::create(request()->merge([ 'number_full' => $jobnumber ])->get());
Please sign in or create an account to participate in this conversation.