Laravel์ ์ฌ์ฉํ์ฌ Datatable์ ๊ตฌํํ๋ ค๊ณ ์๋ํ์ง๋ง Datatable์ด ํ๋์ ์์ฒญ์์ ALL์ ์ป์ ๋ค์ ํ์ด์ง ๋งค๊น์ด JS ์ธก์ ์๊ธฐ ๋๋ฌธ์ ํ
์ด๋ธ์ ๋ง์ ์์ ํ์ด ์์ ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. Laravel ํ์ด์ง ๋งค๊น์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์๋๋ฉด Eloquent์์ ajax ๋ฐฉ๋ฒ์ผ๋ก paginate()
๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํ์ด์ง ๋งค๊น ํ์ ๋ฐํํ ์ ์์ต๋๊น? ์ด๊ฒ์ ๋ด ํ๋ก์ ํธ์ ํฐ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ์ดํฐ ๋ก๋ฉ์ด ๋งค์ฐ ๋๋ฆฝ๋๋ค. ์ผ๋ถ ์๋ ํ๋ก์ธ์ฑ๋ ๊ฒ์ํ ๋ ๋งค์ฐ ๋๋ฆฌ๊ณ sort
, search
๋ฑ๊ณผ ๊ฐ์ ์ผ๋ถ ์์
ํ์ ํ์ด์ง๊ฐ ์ ์ง๋๊ณ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ด์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
serverSide: true,
processing: true,
render: true,
columns: [
{data: 'code'},
{data: 'name', "defaultContent": "<i>Not set</i>"},
{data: 'native_name', "defaultContent": "<i>Not set</i>"},
{data: 'action'}
],
ajax: '{!! route('dt-languages') !!}'
์ฟผ๋ฆฌ ๋์ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ์๋ฒ ์ธก ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๊น? ๊ฐ์ฌ ํด์!
๋ฆฌํฌ์งํ ๋ฆฌ ํจํด์ ์ฌ์ฉํ๊ณ LanguageRepository.php์ ๋ค์์ด ์์ต๋๋ค.
return $this->languages->select('languages.*')->get();
์ฟผ๋ฆฌ ๋น๋๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด get์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
return $this->languages->select('languages.*');
์น์ธ. ์ด์ ๋ ์ข์ ๋ณด์
๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ค์ ํ
์คํธํ๊ณ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ธ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ๊ทธ ์ฌ์ด์ ๋ โโํ๋์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ผ๋ถ ๋จ์ด๋ฅผ ๊ฒ์ํ๋ ค๊ณ ํ๋ฉด ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'languages.action' in 'where clause' (SQL: select count(*) as aggregate from (select '1' as `row_count` from `languages` where (LOWER(`languages`.`name`) LIKE %m% count_row_table)
์ด์ด ์ถ๊ฐ๋์์ผ๋ฏ๋ก ์์ ์ ๊ฒ์/์ฃผ๋ฌธ ๋ถ๊ฐ๋ก ์ค์ ํ์ญ์์ค.
๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค! @์ผ์ฆ๋ผ
ํ
์คํธ๊ฐ ๋๋๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ด ํ ์คํธ ๊ฒฐ๊ณผ:
์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ:
select count(*) as aggregate from (select '1' as row_count from languages where languages.deleted_at is null and languages.deleted_at is null) count_row_table
-> 3.64ms
๋ ๋ฒ์งธ ์ฟผ๋ฆฌ:
select languages.* from languages where languages.deleted_at is null order by code asc limit 10 offset 0
-> 1.05ms
๋์์ ์ฃผ์ @yajra ์๊ฒ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋์์ด ๋์๋ค๋ ๋คํ์ ๋๋ค! ๊ฐ์ฌ ํด์!
๋๋ ๋ฌธ์ ๋ก ๊ณ ํต ๋ฐ๊ณ ์์ต๋๋ค. ๋๋ฆฐ ๋ ๋๋ง. ๋ด ์๋ฒ ์ธก ์ฟผ๋ฆฌ.
$products = DB::connection("mysql2")->table('products')->
join('products_description', 'products.products_id', '=', 'products_description.products_id')
->select(['products.products_id', 'products_description.products_name', 'products.products_isbn13', 'products.products_distributor', 'products.products_price', 'products.products_status']);
return Datatables::of($products)->make(true);
๋์์ฃผ์ธ์. ํ์ด์ง ๋งค๊น์ ์ํด ๋๋ง์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๊น? ์ด๋ป๊ฒ ํด์ผ ํ๋์?
4,000,000๊ฐ ์ด์์ ์ ํ์ ๋ํ ๊ธฐ๋ก์ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
@yajra ๋์์ฃผ์๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋๋ ์ด๊ฒ์ ์ป์์ต๋๋ค. ํ์ด์ง ๋งค๊น ๋งค๊ฐ ๋ณ์๋ฅผ ์ฟผ๋ฆฌ์ ์ฐ๊ฒฐํ์ง ์๋ ๋ฐ์ดํฐ ํ ์ด๋ธ ์์ฒญ์ด ๋ ์ ์์ต๋๊น?
@pnghai ์ด๋ป๊ฒ ํ์ธํ๋์?
@hsali ์ฃ์กํฉ๋๋ค. ๊ฑฐ์ง ๊ฒฝ๋ณด. ๋ด ๋ ผ๋ฆฌ์ ์๊ฒฉ ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ๊ฐ ํฌํจ๋์ด ๋ง๋ค๋ฅธ ์๋ฒ์ ์ฐ๊ฒฐํ๊ณ ๊ฐ ๋ ์ฝ๋๊ฐ ์๋ชป๋ 404 ์ฐ๊ฒฐ์ ๊ฐ์ ธ์ค๋๋ก ํ์ฌ ๋ ์ฝ๋ ์ * 60(์๊ฐ ์ด๊ณผ ์ ์ด)์ ์ฐจ์งํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๋๋ ๊ทธ ๋ ผ๋ฆฌ๋ฅผ ์ผ์ ์ค๋จํ๊ณ ์ง๊ธ์ ์ ์๋ํฉ๋๋ค.
๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค
(p/s: pnghai nick์ ๋ ์์ ์ ๋ ๋ค๋ฅธ github ๊ณ์ ์
๋๋ค)
@pnghai ์ด๋ป๊ฒ ํ์ธํ๋์?
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ?
๋ก๋ฉ์ด ๋๋ฆฐ ์ฌ๋์ ๊ฒฝ์ฐ ์ปจํธ๋กค๋ฌ ๊ธฐ๋ฅ์ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๊ฐ์ ธ์จ ๋ ์ฝ๋๋ฅผ ๋ฐ๋ณตํ๋ ์ผ์ข ์ ๋ฃจํ๊ฐ ์์ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฟผ๋ฆฌ ๋น๋๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด get์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.