ORM/QueryBuilder Flashcards
레코드가 없을 때 중단시키고 싶다면
->firstOrFail()
->first() 는
레코드가 하나도 없을 때
null을 리턴한다
존재하는 지 확인하려면
->exists()
TINY INT
tinyInteger()
BIG INT
bigInteger()
varchar(255)
string(칼럼, 255)
( string(칼럼) = string(칼럼, 255) )
전체 10자리 중에서 소수점 3번 째까지 허용하는 타입
decimal(칼럼, 10, 3)
TEXT
text()
UUID
uuid()
cat, dog만 들어갈 수 있는 타입
enum(칼럼, [‘cat’, ‘dog’])
칼럼에 null 허용
->nullable()
UNIQUE 인덱스 추가
->unique()
기본 키 인덱스 추가
->primary()
기본 인덱스 추가
->index()
created_at, updated_at 추가
->timestamps()
기본 값으로 id 지정
->id(칼럼)
라라벨의 엘로퀀트는
연관관계가 있는
모델의 인스턴스를 가져올 때
함께 불러오지 않는다.
모델 인스턴스를 여러 개를 조회한 뒤에
연관관계가 있는 걸 조회하려고 하면
라라벨의 동작방식이
Lazy Loading 이기 때문에
데이터베이스에 각각에 대해서 쿼리를 한다
Lazy Loading 을 해결해서
성능을 개선하려면
Eager Loading을 사용해야한다.
라라벨에서 Lazy Loading 문제는 항상
hasMany, belongsTo
같은 연관관계에 있는 걸 조회할 때 발생한다
라라벨에서 Eager Loading을
사용하려면
모델의 연관관계가 있는 메서드를
with 메서드의 인자로 사용해야 한다
어디에서 Lazy Loading 문제가 발생하는가?
$posts->comments
모델의 연관관계를 사용하는 곳은
어디서나 발생할 수 있다
이 Lazy Loading 문제를 어떻게 해결하는가?
여러 인스턴스를 로딩하는 부분에
with() 메서드로 사전에 정의한
연관관계의 메서드를 입력하면 된다.
쿼리는 이렇게 바뀐다.
protected $fillable = [ … ]
이 속성이 모델에 있는 이유는 무엇인가?
라라벨의 모델에서 생성이나 수정을 할 때,
인자들을 배열로 넘겨준다.
그런데 변경되면 안되는 값들이
실수로 변경되는 것을 막기 위해서
안전하게 인자로 지정을 해주는 것이다.
->get()
을 사용하면
라라벨 컬렉션을 얻는다
->first()
->find()
를 사용하면
객체를 얻는다
데이터베이스에서
실제로 삭제는 하지 않고
삭제한 것처럼 보이는 기능은?
Soft Deletion
Soft Deletion 은
무턱대고 사용하면
안된다.
반드시 꼭 필요하다고 느낄 때 사용해야한다