찾다

 >  Q&A  >  본문

Laravel 데이터베이스 작업에서 잘못된 데이터 업데이트

<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>
P粉336536706P粉336536706509일 전493

모든 응답(1)나는 대답할 것이다

  • P粉533898694

    P粉5338986942023-08-08 10:17:57

    이러한 속성은 Model 개체의 속성으로 직접 액세스할 수 없기 때문에 property_exist() 함수를 사용하여 열 이름을 가져올 수 없습니다.

    이 내용을 확인하려면 Tinker에서 사용해 보세요.


    으아아아

    내 제안은 array_keys()와 결합된 attributearray() 또는 getAttributes() 메서드를 사용하여 모델의 속성 이름 배열을 가져오는 것입니다. 그렇지 않나요?:

    으아아아

    회신하다
    0
  • 취소회신하다