我正在尝试使用laravel 5.4命令从Excel导入数据。我可以收集所有数据,现在我正在尝试插入数据库但我得到一个奇怪的错误。
这是发生错误的代码片段:
$data = [
'name' => $row['name'],
'address' => $row['address'],
'suite' => $row['suite'],
'city' => $row['city'],
'zipcode' => $row['zipcode'],
'country_code' => $row['country_code'],
'province_code' => $row['province_code'],
'region_id' => $region_id,
'phone' => $row['phone'],
'fax' => $row['fax'],
'website' => $row['website'],
'linkedin' => $row['linkedin'],
'facebook' => $row['facebook'],
'twitter' => $row['twitter'],
'number_employees' => $row['number_employees'],
'year_creation' => $row['year_creation'],
'turnover_id' => $turnover_id,
'status' => 1,
'hidden_directory' => 0,
'hidden_directory_byadmin' => 0,
'is_member' => $row['is_member'],
'created_by' => 1,
];
$company = Company::create($data);
这是错误:
Array to string conversion (SQL: insert into `company` (`name`, `address`, `suite`, `city`, `zipcode`, `country_code`, `province_code`, `region_id`, `phone`, `fax`, `website`, `lin
kedin`, `facebook`, `twitter`, `number_employees`, `year_creation`, `turnover_id`, `status`, `hidden_directory`, `created_by`, `updated_at`, `created_at`) values (Test Company 3, 1
315 Rue St-Louis, , Montreal, H4L 2P4, CA, QC, , +1 (438) 999-555, +1 (438) 999-555, http://www.google.com, https://www.linkedin.com/feed/, https://www.facebook.com/, https://twitt
er.com/, 200, 2010, , 1, 0, 1, 2019-03-27 09:48:29, 2019-03-27 09:48:29))
这就像它缺少SQL插入查询中的刻度。奇怪的是,我在系统的其他部分执行相同的插入,但这不会发生。
我不是想在这里插入JSON。是的,我在StackOverflow中看到了所有类似的问题,当你试图插入json但不是常规字符串和整数时,这种情况很常见。
我在这里做错了什么?
谢谢你的帮助。
基本上,$row
中的指数是array
,而不是string
或int
,正如预期的插入。由于这可能是任何索引,因此最好使用带有try/catch
逻辑的DB::transaction()
块来避免此错误:
\DB::beingTransaction();
try {
$data = [
'name' => $row['name'],
'address' => $row['address'],
'suite' => $row['suite'],
'city' => $row['city'],
'zipcode' => $row['zipcode'],
'country_code' => $row['country_code'],
'province_code' => $row['province_code'],
'region_id' => $region_id,
'phone' => $row['phone'],
'fax' => $row['fax'],
'website' => $row['website'],
'linkedin' => $row['linkedin'],
'facebook' => $row['facebook'],
'twitter' => $row['twitter'],
'number_employees' => $row['number_employees'],
'year_creation' => $row['year_creation'],
'turnover_id' => $turnover_id,
'status' => 1,
'hidden_directory' => 0,
'hidden_directory_byadmin' => 0,
'is_member' => $row['is_member'],
'created_by' => 1,
];
$company = Company::create($data);
\DB::commit();
} catch(\Exception $ex){
\Log::error("Error in Company::create(): ".$ex->getMessage());
\DB::rollBack();
}
如果你不确定$row[...]
可以包含什么,并且有可能出现array
/无效值,那么使用像这样的try/catch
会阻止插入问题,并且只在没有遇到错误时才最终确定插入。除此之外,您需要确保插入的数据符合您的预期。
你可以像这样做字符串的样式转换
$data = [
'name' => (string)$row['name'],
'address' => (string)$row['address'],
'suite' => (string)$row['suite'],
'city' => (string)$row['city'],
'zipcode' => (string)$row['zipcode'],
'country_code' => (string)$row['country_code'],
'province_code' => (string)$row['province_code'],
'region_id' => $region_id,
'phone' => (string)$row['phone'],
'fax' => (string)$row['fax'],
'website' => (string)$row['website'],
'linkedin' => (string)$row['linkedin'],
'facebook' => (string)$row['facebook'],
'twitter' => (string)$row['twitter'],
'number_employees' => (string)$row['number_employees'],
'year_creation' => (string)$row['year_creation'],
'turnover_id' => $turnover_id,
'status' => 1,
'hidden_directory' => 0,
'hidden_directory_byadmin' => 0,
'is_member' => (bool)$row['is_member'],
'created_by' => 1,
];
$company = Company::create($data);
OR而不是字符串,您可以使用int / float。这将以字符串格式保存您的数据。