Я переписал этот запрос на помощь и упростил то, что пытаюсь свести к минимуму количество движущихся частей.
Я опытный программист ООП, но это мой первый проект с 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();
Спасибо за любую помощь!