source

Laravel 데이터베이스에서 모델을 새로고침/새로 고치는 방법

lovecheck 2023. 1. 15. 17:00
반응형

Laravel 데이터베이스에서 모델을 새로고침/새로 고치는 방법

일부 테스트에서는 작성한 사용자 모델이 있으며 특정 속성을 저장해야 하는 메서드를 실행하고 있습니다.철도에서는 보통 이렇게 부르곤 합니다.user.reload데이터베이스에서 속성을 다시 채웁니다.

라라벨에서 그렇게 할 수 있는 방법이 있나요?api를 읽었는데 방법을 찾을 수 없었습니다.http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Model.html 이 "올바른" 방법에 대한 아이디어가 있습니까?

reload() 메서드를 추가하기 위해 8월에 4.0 브랜치에 커밋이 제출되었지만, 지금까지 새로운 Laravel 브랜치와 병합되지 않았습니다.

그러나 Larabel 5는 현재 모델의 새 인스턴스를 반환하는 "fresh()" 메서드를 제공하고 있습니다.Larabel 5.0 이후를 사용하면 다음과 같이 모델을 새로고침할 수 있습니다.

$model = $model->fresh(); 

fresh()는 기존 $모델을 직접 업데이트하지 않고 새 인스턴스만 반환하므로 "$model ="을 사용해야 합니다.또한 빠르게 로드하려는 관계 배열인 매개 변수도 수락합니다.

아직 Larabel 5를 사용하지 않았지만 동일한 기능을 원하는 경우 다음 방법을 모델에 추가할 수 있습니다.

public function fresh(array $with = array())
{
    $key = $this->getKeyName();
    return $this->exists ? static::with($with)->where($key, $this->getKey())->first() : null;
}

업데이트: Larabel 5.4.24 이후를 사용하는 경우,$model->refresh()다음과 같은 새 개체를 가져오는 대신 적절한 개체의 속성과 관계를 새로 고치는 데 사용할 수 있는 메서드fresh()자세한 내용은 제프 퍼켓의 답변을 참고하세요

PR#19174 덕분 5.4.24는refresh방법.

$model->refresh();

이 방법에서는, 다른 회답에 나타나 있듯이, 재할당을 실시할 필요가 없습니다.freshmethod: 다른 메서드로 전달된 모델을 새로 고치는 경우에는 일반적으로 도움이 되지 않습니다.이는 변수 할당이 나중에 콜링 컨텍스트에서 사용할 수 있는 범위를 벗어나기 때문입니다.

  • refresh()는 가변 조작입니다.데이터베이스에서 현재 모델인스턴스를 새로고침합니다.
  • fresh()는 불변의 연산입니다.데이터베이스에서 새 모델 인스턴스를 반환합니다.현재 인스턴스에는 영향을 주지 않습니다.
// Database state:
$user=User::create([
  'name' => 'John',
]);

// Model (memory) state:
$user->name = 'Sarah';

$user2 = $user->fresh();
// $user->name => 'Sarah';
// $user2->name => 'John'

$user->refresh();
// $user->name => 'John'

저도 안 보여요.다음 작업을 수행해야 할 것 같습니다.

$model = $model->find($model->id);

직접 작성할 수도 있습니다.

public function reload()
{
    $instance = new static;

    $instance = $instance->newQuery()->find($this->{$this->primaryKey});

    $this->attributes = $instance->attributes;

    $this->original = $instance->original;
}

여기서 테스트해 봤는데 효과가 있는 것 같은데, 어디까지가 될지는 모르겠지만, 웅변은 꽤 큰 클래스입니다.

는 @Antonio의맞다고에 따라서는 @Antonio를 .$model->setRawAttributes ★★★★★★★★★★★★★★★★★」$model->getAttributes.

$users = User::all();

foreach($users as $user)
{
    $rawAttributes = $user->getAttributes();

    // manipulate user as required 
    // ..
    // Once done, return attribute state

    $user->setRawAttributes($rawAttributes);
}

이 문제의 가장 큰 단점은 데이터 속성만 새로고침하고, 변경한 관계는 새로고침하지 않는다는 것입니다.그것 또한 긍정적인 측면으로 여겨질 수 있다.

편집

L5 - L5 -fresh()

언급URL : https://stackoverflow.com/questions/23642950/how-to-reload-refresh-model-from-database-in-laravel

반응형