Laravel 데이터베이스 작업에서 잘못된 데이터 업데이트
P粉336536706
2023-08-07 20:33:01
<p>以下是我模型中的函数代码:</p>
<pre class="brush:php;toolbar:false;">공개 함수 updateAnime(요청 $request)
{
$updatedFields = [];
$요청->검증([
'제목' => ['필수의'],
'출시_날짜' => ['필수', '정수'],
'저자' => ['필수의'],
'스튜디오' => ['필수의'],
'설명' => ['필수의'],
]);
$request->release_date = (int)$request->release_date;
$animeInfo = Anime::where('title', $request->oldTitle)->with('authors', 'studios')->first();
$author = Author::firstOrCreate(['author' => $request->author]);
작가애니메이션::where([
['저자', $animeInfo->저자[0]->저자],
['애니메이션', $request->oldTitle]
])->업데이트([
'저자' => $author->작가,
'애니메이션' => str_replace(' ', '-', $request->제목)
]);
$studio = Studio::firstOrCreate(['studio_name' => $request->studio]);
StudioAnime::어디([
['스튜디오', $animeInfo->studios[0]->studio_name],
['애니메이션', $request->oldTitle]
])->업데이트([
'스튜디오' => $studio->studio_name,
'애니메이션' => str_replace(' ', '-', $request->제목)
]);
foreach ($request->all() as $key => $value) {
if (property_exists($animeInfo, $key)) {
if ($request->$key != $animeInfo->$key) {
$updatedFields[$key] = $request->$key;
}
}
}
$animeInfo->update($updatedFields);
return response()->json(['message' => '데이터가 성공적으로 업데이트되었습니다. n 업데이트된 데이터: ' . implode(', ', array_keys($updatedFields))]);
}</pre>
<p>제조업체:</p>
<pre class="brush:php;toolbar:false;">$anime = new Anime();
return $anime->updateAnime($request);</pre>
<p>여러분, 이런 일이 발생하는 이유와 해결 방법<br /><br />이전 코드에서는 변경 사항을 확인하지 않고 데이터를 업데이트했는데 모두 작동했습니다.</p><p>< /></p>
<pre class="brush:php;toolbar:false;">$animeInfo->update([
'제목' => str_replace(' ', '-',$request->title),
'포스터' => $animeInfo->포스터,
'설명' => $요청->설명,
'출시_날짜' => $요청->출시_날짜,
'예고편' => $animeInfo->예고편,
]);
return response()->json(['message' => '데이터가 성공적으로 업데이트되었습니다.']);```</pre>
<p><br /></p>
이러한 속성은 Model 개체의 속성으로 직접 액세스할 수 없기 때문에 property_exist() 함수를 사용하여 열 이름을 가져올 수 없습니다.
이 내용을 확인하려면 Tinker에서 사용해 보세요.
으아아아내 제안은 array_keys()와 결합된 attributearray() 또는 getAttributes() 메서드를 사용하여 모델의 속성 이름 배열을 가져오는 것입니다. 그렇지 않나요?:
으아아아