pagingLoading

κ°œλ°œμ„ μˆ˜ν–‰ν•˜λ‹€ 보면 μ—°κ΄€κ΄€κ³„μžˆλŠ” ν…Œμ΄λΈ”μ„ μ‘°νšŒν• λ•Œ λ·°μ—μ„œ λ¬Έμžμ—΄ 보간을 ν•  λ•Œλ§ˆλ‹€ 관계λ₯Ό 톡해 쿼리λ₯Ό μ‘°νšŒν•˜λŠ” 것과 같은 λΆ€λΆ„μ—μ„œ N+1문제λ₯Ό 맞λ‹₯뜨릴 수 μžˆμ„ 것이닀.

μ΄λ•Œ ν•΄κ²°λ°©λ²•μœΌλ‘œ dbμ—μ„œ 데이터λ₯Ό ν•œλ²ˆμ— 쑰회 ν•΄μ˜€λŠ” μ¦‰μ‹œλ‘œλ”©μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.

μ¦‰μ‹œ λ‘œλ”© (Eager Loading)

$articles = \App\Article::with('user')->get();

λͺ¨λΈ 쿼리 μ‹œμž‘λΆ€λΆ„μ— with()λ©”μ„œλ“œλ₯Ό μ²΄μΈν•΄μ„œ μ‚¬μš©ν•˜λ©΄ λ˜λŠ”λ° μ΄λ•Œ 인자둜 받은 관계λ₯Ό 미리 λ‘œλ“œν•˜κ²Œ λœλ‹€. 그런데 μ¦‰μ‹œ λ‘œλ”©μ„ μ‚¬μš©ν•  λ•Œ μ£Όμ˜ν•  점이 μžˆλŠ”λ° λ‹€μŒκ³Ό κ°™λ‹€.

  1. with()λ©”μ„œλ“œλŠ” 항상 μ—˜λ‘œν€€νŠΈ λͺ¨λΈ λ°”λ‘œ 뒀에 μœ„μΉ˜ν•΄μ•Όν•œλ‹€.

  2. with()λ©”μ„œλ“œ μΈμžλŠ” ν…Œμ΄λΈ” 이름이 μ•„λ‹ˆλΌ λͺ¨λΈμ—μ„œ 관계λ₯Ό ν‘œν˜„ν•˜λŠ” λ©”μ„œλ“œμ˜ 이름이닀.

지연 λ‘œλ”© (Lazy Loading)

$articles = \App\Article::get();
$articles->load('user');

κΈ°λ³Έμ „λž΅μ΄ μ§€μ—°λ‘œλ”©μœΌλ‘œ get()λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ μ‘°νšŒν•˜λ©΄ 연관관계에 μžˆλŠ” λͺ¨λΈμ˜ μ •λ³΄λŠ” μ‘°νšŒλ˜μ§€ μ•ŠλŠ”λ° μ›ν• λ•Œ user의 정보λ₯Ό λ‘œλ”©ν•˜κ³  μ‹Άλ‹€λ©΄ load()λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ λ‘œλ”©μ„ μˆ˜ν–‰ν•˜λ©΄ λœλ‹€.

νŽ˜μ΄μ§•

get()이 μ•„λ‹ˆλΌ paginate()λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜λ©΄ νŽ˜μ΄μ§•μ„ μ‰½κ²Œ μ΄μš©ν•  수 μžˆλ‹€.

$articles = \App\Article::latest()->paginate(3);

latest()λŠ” λ‚ μ§œ μ—­μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” λ©”μ„œλ“œλ‘œ 0orderBy('created_at','desc')와 κ°™λ‹€.

Last updated