Eloquent ORM이란
Laravel에는 Eloquent라는 객체 관계 매퍼(ORM)가 포함되어 있습니다. Eloquent는 데이터베이스와의 대화를 쉽게 하기 위한 것으로, ActiveRecord 패턴을 구현하고 있습니다. Eloquent를 사용하면 데이터베이스의 각 테이블에 대응하는 “모델” 클래스를 준비합니다. 모델을 통해 레코드의 조회·삽입·갱신·삭제를 할 수 있습니다.Eloquent를 사용하기 전에
config/database.php에서 데이터베이스 접속을 설정해 주세요.
기본적으로 .env 파일의 DB_* 설정이 사용됩니다.모델 생성
make:model Artisan 명령으로 새 모델을 생성합니다.
-m 옵션을 사용합니다.
app/Models 디렉터리에 생성됩니다.
모델과 테이블의 대응 관계
Eloquent는 클래스명에서 테이블명을 자동으로 추측합니다. 클래스명을 스네이크케이스의 복수형으로 변환한 것이 테이블명이 됩니다.
테이블명이 명명 규칙에 맞지 않는 경우, 모델에
$table 프로퍼티를 정의해 명시적으로 지정할 수 있습니다.
타임스탬프
Eloquent는 기본적으로created_at과 updated_at 컬럼을 자동 관리합니다.
마이그레이션에서 $table->timestamps()를 추가해 두면 모델의 저장·갱신 시에 자동으로 값이 설정됩니다.
타임스탬프의 자동 관리를 무효화하려면 $timestamps를 false로 설정합니다.
매스 어사인먼트 보호
Eloquent로 데이터를 일괄 저장할 때는 매스 어사인먼트 보호 설정이 필요합니다.fillable
대입을 허용하는 컬럼을$fillable 프로퍼티로 지정합니다.
guarded
반대로 대입을 금지하는 컬럼을 지정하려면$guarded를 사용합니다.
Eloquent 쿼리 실행 플로우
User::where()->get() 같은 쿼리가 어떻게 실행되는지, 내부 흐름을 보여 줍니다.
기본 CRUD 조작
레코드 가져오기(Read)
모든 레코드를 가져옵니다.레코드 생성(Create)
create 메서드로 레코드를 하나 삽입합니다($fillable 설정이 필요합니다).
레코드 갱신(Update)
모델을 가져와 값을 변경한 후save를 호출하면 갱신됩니다.
update 메서드를 사용하면 여러 컬럼을 한 번에 갱신할 수 있습니다.
비관적 잠금과 함께 모델 다시 읽어오기
트랜잭션 안에서 모델을 다시 읽어오면서 동시에 비관적 잠금을 획득하려면refreshForUpdate 메서드를 사용합니다. 모델은 FOR UPDATE 잠금을 획득한 상태로 다시 읽어와집니다.
레코드 삭제(Delete)
delete 메서드로 레코드를 삭제합니다.
기본 쿼리 메서드
실전 예시: Post 모델을 사용한 데이터 조작
마이그레이션으로 생성한posts 테이블을 조작하는 컨트롤러 예시입니다.
모델 이벤트의 라이프사이클
save()를 호출했을 때 발생하는 이벤트의 흐름을 보여줍니다. 신규 생성인지 갱신인지에 따라 다른 이벤트가 발생하지만, saving·saved는 양쪽 경우에 공통적으로 발생합니다.
다음 단계
마이그레이션
Eloquent가 이용하는 테이블을 마이그레이션으로 생성하는 방법을 되짚어 봅니다.