[英]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.