Laravel - 使用 Maatwebsite Excel 根据条件导入更新 table
Laravel - Update a table using Maatwebsite Excel Import based on condition
使用Laravel-5.8和Maatwebsite-3.1,我有一个table叫员工(Employee)。
class FirstEmployeeSheetImport implements ToModel, WithBatchInserts, WithHeadingRow, SkipsOnError, WithValidation, SkipsOnFailure
{
use Importable, SkipsErrors, SkipsFailures;
public function model(array $row)
{
$this->department = $row['department'];
$employee_data = [
'employee_code' => $row['employee_code'],
'company_id' => Auth::user()->company_id,
'email' => $row['official_email'],
'department_id' => $this->getDepartment(),
];
$employee = Employee::create($employee_data);
}
public function getDepartment(){
if(!empty($this->department) || !$this->department){
return HrDepartment::where('dept_name',$this->department)->where('company_id',Auth::user()->company_id)->pluck('id')->first();
} else {
return 0;
}
}
}
我想使用 excel 上传来更新这两 (2) 个字段:每个员工的电子邮件和 department_id 其中:
company_id = Auth::user()->company_id AND employee_code = $row['employee_code'].
另外,应该只对满足条件的进行更新。我应该只执行更新而不执行crete。
如何实现?
谢谢
您可以使用 ToCollection
将您的数据导入 $rows
,然后相应地更新您的数据。
class FirstEmployeeSheetImport implements ToCollection
{
public function collection(Collection $rows)
{
foreach ($rows as $row)
{
Employee::where('company_id', auth()->user()->company_id)
->where('employee_code', $row['employee_code'])
->update([
'email' => $row['email'],
...
]);
}
}
}
使用Laravel-5.8和Maatwebsite-3.1,我有一个table叫员工(Employee)。
class FirstEmployeeSheetImport implements ToModel, WithBatchInserts, WithHeadingRow, SkipsOnError, WithValidation, SkipsOnFailure
{
use Importable, SkipsErrors, SkipsFailures;
public function model(array $row)
{
$this->department = $row['department'];
$employee_data = [
'employee_code' => $row['employee_code'],
'company_id' => Auth::user()->company_id,
'email' => $row['official_email'],
'department_id' => $this->getDepartment(),
];
$employee = Employee::create($employee_data);
}
public function getDepartment(){
if(!empty($this->department) || !$this->department){
return HrDepartment::where('dept_name',$this->department)->where('company_id',Auth::user()->company_id)->pluck('id')->first();
} else {
return 0;
}
}
}
我想使用 excel 上传来更新这两 (2) 个字段:每个员工的电子邮件和 department_id 其中:
company_id = Auth::user()->company_id AND employee_code = $row['employee_code'].
另外,应该只对满足条件的进行更新。我应该只执行更新而不执行crete。
如何实现?
谢谢
您可以使用 ToCollection
将您的数据导入 $rows
,然后相应地更新您的数据。
class FirstEmployeeSheetImport implements ToCollection
{
public function collection(Collection $rows)
{
foreach ($rows as $row)
{
Employee::where('company_id', auth()->user()->company_id)
->where('employee_code', $row['employee_code'])
->update([
'email' => $row['email'],
...
]);
}
}
}