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