ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 라라벨 isDirty, isClean 및 wasChanged 메서드
    백엔드/laravel 2024. 1. 19. 20:55

    1. isDirty 메서드:

    • isDirty 메서드는 특정 속성이 변경되었는지 여부를 확인합니다.
    • 주로 "속성이 변경되었을 때 어떤 동작을 수행해야 하는가?"와 같은 상황에서 사용됩니다.
    • isDirty는 변경된 속성이 어떤 값으로 변경되었는지까지 신경쓰지 않습니다. 단순히 해당 속성이 변경되었는지 여부를 확인합니다.

        $post = Post::find(1000);
        $post->title = "New Title";

        // Check if the 'title' attribute has been modified
        if ($post->isDirty('title')) {
            echo "Title has been changed";
        } else {
            echo "Title has not been changed";
        }

        if ($post->isDirty(['title', 'excerpt'])) {
            echo "Title or excerpt has been changed";
        } else {
            echo "Title and excerpt have not been changed";
        }

     

    2. isClean 메서드:

    • isClean 메서드는 데이터베이스에 아직 저장되지 않은 속성의 변경 여부를 확인합니다.
    • 주로 "데이터베이스에 아직 저장되지 않은 변경 사항이 있는가?"와 같은 상황에서 사용됩니다.
    • isClean은 변경된 속성이 데이터베이스에 아직 저장되지 않은 경우에 true를 반환합니다.

        $post = Post::find(1000);
        $post->title = "New Title";

        // Check if there are no unsafe changes to the model attributes
        if ($post->isClean()) {
            echo "Model attributes are clean";
        } else {
            echo "Model attributes are not clean";
        }

     

        위의 예제에서는 $post 객체의 title 속성을 변경했지만, 

        save 메서드를 호출하여 이 변경 사항을 데이터베이스에 저장하지 않았습니다. 
        따라서 isClean 메서드를 사용하면 "Model attributes are not clean"이 출력됩니다.

     

    따라서 두 메서드는 서로 보완적으로 사용될 수 있습니다.

    isDirty는 현재 객체의 변경 사항을 확인하고, isClean은 해당 변경 사항이 데이터베이스에 저장되지 않았는지 여부를 확인합니다.

     

    3. wasChanged 메서드

        특정 속성이 모델이 마지막으로 데이터베이스에 저장된 이후에 변경되었는지 여부를 확인하는 데 사용됩니다.

        이 메서드는 특정 속성이 이전에 저장된 값을 기준으로 현재 값과 비교하여 변경 여부를 판단합니다.

     

        $post = Post::find(1000);
        $post->title = "New Title";
        $post->save();

        // Check if the 'title' attribute was changed since the last save
        if ($post->wasChanged('title')) {
            echo "Title attribute was changed";
        } else {
            echo "Title attribute was not changed";
        }

     

    댓글

Designed by Tistory.