Laravel пытается вставить данные в БД с локальной загрузкой данных - без ошибок и без вставленных данных - PullRequest
0 голосов
/ 13 мая 2019
public function loadDataLocalInfile($table, $columns, $fileName)
    {
        $filePath = Storage::disk('local')->path($fileName);
        $fields = '';
        foreach ($columns as $key => $column) {
            $fields .= $column . ',';
        }
        $fields = rtrim($fields, ',');
        DB::raw("
            LOAD DATA LOCAL INFILE '" . $filePath . "' 
            INTO TABLE temporary_" . $table . "
            FIELDS TERMINATED BY ';'
            ENCLOSED BY '\"'
            LINES TERMINATED BY '\\n'
            IGNORE 1 LINES (" . $fields . ")");
        $updateColumns = '';
        foreach ($columns as $key => $column) {
            $updateColumns .= $column . ' = VALUES(' . $column . '),';
        }
        $updateColumns = rtrim($updateColumns, ',');
        DB::raw('
            INSERT INTO ' . $table . '
            SELECT * FROM temporary_' . $table . '
            ON DUPLICATE KEY UPDATE ' . $updateColumns);
    }

Когда скрипт выполняется без ошибок и данных, вставленных в БД, все таблицы существуют, когда я делаю

print_r(Storage::disk('local')->get($fileName));

Файл CSV напечатан

"name";"image"
"userNameA";"urlImageA"
"userNameB";"urlImageB"
"userNameC";"urlImageC"

Я добавил PDO :: MYSQL_ATTR_LOCAL_INFILE => true в параметрах mysql в config / database.php

...