Laravel-Eloquent-Добавление записи в MySQL: Построение команды динамической вставки eloquent, и она возвращает «Столбец не найден» в самом первом столбце - PullRequest
2 голосов
/ 10 ноября 2019

Я переписал этот запрос на помощь и упростил то, что пытаюсь свести к минимуму количество движущихся частей.

Я опытный программист ООП, но это мой первый проект с LAMP, Laravelили Eloquent.

Я строю средство импорта данных в Laravel-Spark. Пользователь предоставит файл .csv. Моя программа определит, какие данные были предоставлены на основе заголовка (первой) строки данных. Оттуда он вставит новую строку в таблицу MySQL и обновит предоставленные поля.

function ImportPositions($incomingfile)
  {
    if (($handle = fopen ( public_path () . '/ImportFiles/samplepositions.csv', 'r' )) !== FALSE) {

        $header = fgetcsv($handle, 2000, ',');
        $headercount = count($header);

        while ( ($data = fgetcsv ( $handle, 2000, ',' )) !== FALSE ) {

          $position = new Position;
          $i = 0;
          while ($i<$headercount):

              $fieldname=$header[$i];
              $fielddata=$data[$i];
              // Example:  $position->posno="12345";
              $position->$fieldname=$fielddata;

              $i++;
          endwhile;

          $position->save();
      }
        fclose ( $handle );
    }
  }

Код возвращает эту ошибку. Поле определенно существует.

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'active' in 'field list' (SQL: insert into `positions` (`active`, `updated_at`, `created_at`) values (A, 2019-11-12 03:32:50, 2019-11-12 03:32:50))

При попытке отладки все работает нормально:

$fieldname2='active';
$fielddata2='A';
$position->$fieldname2=$fielddata2; 
$position->save();

Далее попробуйте доказать, что мои производные значения действительны:

$fieldname=$header[$i];
$fielddata=$data[$i];

$fieldname2='active';
$fielddata2='A';

dump("|".$fieldname."|".$fieldname2."|");
dd("|".$fielddata."|".$fielddata2."|");

возвращает следующее, поэтому два набора переменных кажутся идентичными:

"|active|active|"
"|A|A|"

НО: когда я подставляю производные переменные для типизированных переменных, происходит сбой и выдается ошибка, перечисленная выше.

$fieldname=$header[$i];
$fielddata=$data[$i];
$position->$fieldname=$fielddata;
$position->save();

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 13 ноября 2019

Ответ. У моего входного файла был маркер спецификации, что вызвало проблему с импортом. Он испортил оператор SQL, хотя его не было видно в сообщениях отладки, в которых показан скрипт.

К ИСПРАВЛЕНИЮ: просто: откройте файл импорта в Notepad ++ и установите флажок «КОДИРОВАНИЕ». Мой файл показал «UTF-8-BOM». Я изменил его на «UTF-8» и исправил проблему.

Спасибо всем, кто дал свой вклад!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...