Laravel Archent가 변경된 경우에만 업데이트
그 레코드에 변경이 가해진 경우, 유창한 모델을 사용하여 라라벨에서 레코드를 갱신할 수 있는 방법이 있습니까?변경 내용을 저장하기 위해 버튼을 누르기만 하면 사용자가 정당한 이유 없이 데이터베이스를 계속 요청하는 것을 원하지 않습니다.나는 가지고 있다javascript
페이지의 변경 유무에 따라 저장 버튼을 활성화/비활성화하는 기능인데, 서버측에서도 이러한 기능을 할 수 있는지 알고 싶습니다.레코드가 변경되었는지 확인하는 것만으로 (프레임워크의 내부 기능에 어필하지 않고) 혼자 할 수 있다는 것은 알고 있습니다만, 그 전에 Laravel의 웅변 모델이 이미 그것을 처리하고 있는지 알고 싶기 때문에 바퀴를 다시 발명할 필요는 없습니다.
레코드를 갱신하는 방법은 다음과 같습니다.
$product = Product::find($data["id"]);
$product->title = $data["title"];
$product->description = $data["description"];
$product->price = $data["price"];
//etc (string values were previously sanitized for xss attacks)
$product->save();
벌써 하고 있잖아!
save()
모델 내의 무언가가 변경되었는지 확인합니다.그렇지 않으면 DB 쿼리를 실행하지 않습니다.
코드와 관련된 부분은 다음과 같습니다.Illuminate\Database\Eloquent\Model@performUpdate
:
protected function performUpdate(Builder $query, array $options = [])
{
$dirty = $this->getDirty();
if (count($dirty) > 0)
{
// runs update query
}
return true;
}
그getDirty()
method는 단순히 현재 속성을 에 저장된 복사본과 비교합니다.original
모델 생성 시.이것은, 로 행해집니다.syncOriginal()
방법:
public function __construct(array $attributes = array())
{
$this->bootIfNotBooted();
$this->syncOriginal();
$this->fill($attributes);
}
public function syncOriginal()
{
$this->original = $this->attributes;
return $this;
}
모델이 더러우신지 확인하고 싶으시면 전화주세요.isDirty()
:
if($product->isDirty()){
// changes have been made
}
또는 특정 속성을 체크하는 경우:
if($product->isDirty('price')){
// price has changed
}
사용할 수 있습니다.$product->getChanges()
달변 모델로 계속 하고 있어요.여기서 문서 확인
이 메서드를 추가하고 싶습니다만, 편집 폼을 사용하고 있는 경우는, 이 코드를 사용해 변경 내용을 보존할 수 있습니다.update(Request $request, $id)
기능:
$post = Post::find($id);
$post->fill($request->input())->save();
입력에 동일한 열 이름을 지정해야 한다는 점에 유의하십시오.그fill()
함수가 모든 작업을 수행합니다. : )
언급URL : https://stackoverflow.com/questions/28866500/laravel-eloquent-update-just-if-changes-have-been-made
'programing' 카테고리의 다른 글
mysql2 설치 오류: gem 네이티브 확장을 빌드하지 못했습니다. (0) | 2022.11.07 |
---|---|
Java logging API를 사용하는 동안 기본 콘솔핸들러를 디세블로 하려면 어떻게 해야 하나요? (0) | 2022.11.07 |
다시 그리기 위해 캔버스를 지우는 방법 (0) | 2022.11.07 |
(String) or .toString()? (0) | 2022.11.07 |
쿠키 또는 로컬 스토리지 없이 사용자 인식 가능 (0) | 2022.11.07 |