Laravel-excel: [๋ฒ„๊ทธ] ๊ฐ€์ ธ ์˜ค๊ธฐ ์˜ค๋ฅ˜ : ๊ฐœ์ฒด beginTransaction

์— ๋งŒ๋“  2019๋…„ 01์›” 16์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Maatwebsite/Laravel-Excel

์ „์ œ ์กฐ๊ฑด

  • [x] ์ฝ”๋“œ ์™ธ๋ถ€์—์„œ ๋™์ž‘์„ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ๋Š” ๋ฌธ์ œ๋Š” Laravel Excel๋กœ ๊ฒฉ๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • [x] ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ์ œ์ถœ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • [x]์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” PR์ด ์ œ์ถœ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „

  • PHP ๋ฒ„์ „ : 7.2
  • ๋ผ ๋ผ๋ฒจ ๋ฒ„์ „ : 5.7.17
  • ํŒจํ‚ค์ง€ ๋ฒ„์ „ : 3.1.3

๊ธฐ์ˆ 

๊ฐ€์ ธ ์˜ค๊ธฐ ๊ฐœ์ฒด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ToCollection์˜ ๋ฌธ์ œ๋ฅผ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Excel :: import๋ฅผ ์ˆ˜ํ–‰ ํ•  ๋•Œ ์•„๋ž˜ Actual Behavior ํ‘œ์‹œ๋œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. MongoDB๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋„ ๋ชจ๋ธ ์ž„ํฌํŠธ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ํŒจํ‚ค์ง€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค€๋น„๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :

์ปฌ๋ ‰์…˜ ํ–‰์˜ dd.

์‹ค์ œ ํ–‰๋™ :

1) Tests\Unit\Services\Websites\WebsiteCredentialsImportServiceTest::testImportTabDelimited
Error: Call to a member function beginTransaction() on null

/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:109
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:93
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:23
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:327
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:223
/var/www/vhosts/website.local/vendor/maatwebsite/excel/src/Reader.php:96
/var/www/vhosts/website.local/vendor/maatwebsite/excel/src/Excel.php:120
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:223
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:198
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:182
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:122
/var/www/vhosts/website.local/tests/Unit/Services/Websites/WebsiteCredentialsImportServiceTest.php:25

์ถ”๊ฐ€ ์ •๋ณด

<?php

namespace App\Imports\Websites;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;

/**
 * Class WebsiteCredentialsImport
 *
 * <strong i="29">@package</strong> App\Imports\Websites
 */
class WebsiteCredentialsImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        dd(['COLLECTION' => $rows]);
    }
}
        $collection = Excel::import(
            new WebsiteCredentialsImport,
            $this->file_name,
            null,
            $this->reader_type
        );
enhancement help wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•„๋งˆ๋„ ์—ฌ๋Ÿฌ๋ถ„์€ # 2384์—์„œํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ์†”๋ฃจ์…˜์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

php artisan config:clear

๋•Œ๋กœ๋Š” ํŠนํžˆ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ Laravel์ด ์บ์‹œ๋ฅผ ์ •๋ฆฌํ•˜์ง€ ์•Š๊ณ  ํŒจํ‚ค์ง€๊ฐ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋“œ๋ผ์ด๋ฒ„๋Š” ํ•ญ์ƒ NULL์ด๊ณ  ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  13 ๋Œ“๊ธ€

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ ๋ฐฐ์น˜ ์‚ฝ์ž…์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Eloquent / Laravel-DB ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. .eg Mongo๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” PR์„ ๋ณ‘ํ•ฉํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฒ„์ „์—๋Š” Laravel-DB ํŠธ๋žœ์žญ์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์„ค์ •๊ณผ ์‚ฌ์šฉ์ž ์ง€์ • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” !

๋‚˜๋Š” ๋งค์šฐ ์ •ํ™•ํ•œ ์ƒํ™ฉ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ Mongo๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฑฐ๋ž˜๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” !

๋‚˜๋Š” ๋งค์šฐ ์ •ํ™•ํ•œ ์ƒํ™ฉ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ Mongo๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฑฐ๋ž˜๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

https://github.com/Maatwebsite/Laravel-Excel/commit/13374dab1592f00f715fa0e02541ecb52217655b#diff -19c82312ec0dbaba6a8c595db14fa56f

๊ด€๋ จ ๋ฌธ์„œ ์„น์…˜ : https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋„ ๊ฐ™์€ ์ƒํ™ฉ์— ์žˆ์Šต๋‹ˆ๋‹ค. Excel ํŒŒ์ผ์„ ์ฝ์–ด์•ผํ•˜๊ณ  mongodb์— ์ €์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฝ์—ˆ์œผ๋ฉฐ ํ˜„์žฌ ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
"[MaatwebsiteExcel \ Transactions \ TransactionManager]์— ๋Œ€ํ•œ NULL ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."
๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
ํ›Œ๋ฅญํ•œ ํŒจํ‚ค์ง€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์ปฌ๋ ‰์…˜์— ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉ ํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐ€์ ธ ์˜ค๊ธฐ toModel์ด ์ค‘๋‹จ๋˜๋Š” ์ด์œ ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

Collection์€ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์ด์ „ ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Collection์€ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์ด์ „ ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๋น ๋ฅธ ๋‹ต์žฅ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ์ฝ์—ˆ์œผ๋ฏ€๋กœ "[MaatwebsiteExcel \ Transactions \ TransactionManager]์— ๋Œ€ํ•œ NULL ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜.
๊ทธ๋ž˜์„œ ์ €๋Š” ์ปฌ๋ ‰์…˜์œผ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค

๋‹น์‹ ์€ ์•„๋งˆ ๋‹น์‹ ์˜ ์„ค์ •์— ๋ญ”๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅํ•˜๊ณ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. NULL ์€ (๋Š”) ์œ ํšจํ•œ ๋“œ๋ผ์ด๋ฒ„์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 'null' (๋ฌธ์ž์—ด์—์ฃผ์˜)์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๊ฐ™์€ ์ƒํ™ฉ์— ์ฒ˜ํ•ด์žˆ๋‹ค. https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions์—์„œ ํ•ด๊ฒฐ์ฑ…์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ Custom transaction handlers ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๊ณผ ์‚ฌ์šฉ ์œ„์น˜๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋„ mongodb๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ซ‘์•„ @myeong_

์•„๋งˆ๋„ ์—ฌ๋Ÿฌ๋ถ„์€ # 2384์—์„œํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ์†”๋ฃจ์…˜์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

php artisan config:clear

๋•Œ๋กœ๋Š” ํŠนํžˆ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ Laravel์ด ์บ์‹œ๋ฅผ ์ •๋ฆฌํ•˜์ง€ ์•Š๊ณ  ํŒจํ‚ค์ง€๊ฐ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋“œ๋ผ์ด๋ฒ„๋Š” ํ•ญ์ƒ NULL์ด๊ณ  ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์—ฌ๋Ÿฌ๋ถ„์€ # 2384์—์„œํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ์†”๋ฃจ์…˜์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

php artisan config:clear

๋•Œ๋กœ๋Š” ํŠนํžˆ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ Laravel์ด ์บ์‹œ๋ฅผ ์ •๋ฆฌํ•˜์ง€ ์•Š๊ณ  ํŒจํ‚ค์ง€๊ฐ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋“œ๋ผ์ด๋ฒ„๋Š” ํ•ญ์ƒ NULL์ด๊ณ  ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋ฒ ์ŠคํŠธ ๋‹ต๋ณ€

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰