[英]How to get Laravel last inserted ID from Excel import sheet
我对 Laravel 比较陌生(从历史上看,我已经从头开始编写了所有的 PHP)只是想在创建新的真实站点之前学习基本的 Laravel 站点创建。 现在我有一个多页 excel 文件,我想导入该文件并将数据放入表中。 我按照Laravel Excel 说明进行操作,并且我有这个 ChartImport.php 文件,该文件完全符合书面/预期的要求。
<?php
namespace App\Imports;
use App\Chart;
use App\Chart_count;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class ChartImport implements WithMultipleSheets
{
public function sheets(): array
{
return [
0 => new ChartNameImport(),
1 => new ChartCountImport(),
];
}
}
class ChartNameImport implements ToModel
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Chart([
'title' => $row[0],
'owner_id' => auth()->id()
]);
}
}
class ChartCountImport implements ToModel
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Chart_count([
'chart_id' => 3,
'count' => $row[0],
'name' => $row[1],
]);
}
}
虽然现在,如您所见,我正在硬编码
'chart_id' => 3
我希望 chart_id 是之前 function 调用的自动创建的 id,但我不确定是否有任何 Laravel 方式到 go 关于它。 我确信我可以创建一个新的 PDO 实例并从数据库或其他东西中获取数据,但这似乎根本不是一个好方法。 你会怎么做呢? 谢谢!
您可以导入到collections ,而不是导入模型:
例子:
namespace App\Imports;
use App\User;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class UsersImport implements ToCollection
{
public function collection(Collection $rows)
{
foreach ($rows as $row)
{
$id = DB::table('users')->insertGetId([
'title' => $row[0],
'owner_id' => auth()->id()
]);
}
}
}
请注意,我正在使用[insertGetId]
方法插入记录,然后检索 ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.