在Laravel中导入一个Csv文件后,如果数据库存在则更新一条记录?
Update a record of DB if it exists after importing a Csv file in Laravel?
我正在使用 Maatwebsite\Excel
导入一个 csv 文件以将新用户存储在数据库中。如果我已经在数据库中创建了一条记录,其中包含它创建的相同数据并出错。如果记录存在,我该如何更新?
我的导入 class 是:
class UsersImport implements ToModel, WithCustomCsvSettings, WithHeadingRow
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new User([
'firstname' => $row['firstname'],
'lastname' => $row['lastname'],
'email' => $row['email'],
'password' => $row['pass'],
'created_at' => $row['registered'],
]);
}
public function getCsvSettings(): array
{
return [
'delimiter' => ","
];
}
}
您应该实现 WithUpserts
接口。您还需要指定哪个字段应该是唯一的,如果它存在,它将更新记录,否则它将创建新的记录。
假设您的唯一列是电子邮件,将您的代码更改为以下内容:
class UsersImport implements ToModel, WithCustomCsvSettings, WithHeadingRow, WithUpserts
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new User([
'firstname' => $row['firstname'],
'lastname' => $row['lastname'],
'email' => $row['email'],
'password' => $row['pass'],
'created_at' => $row['registered'],
]);
}
public function getCsvSettings(): array
{
return [
'delimiter' => ","
];
}
public function uniqueBy()
{
return 'email';
}
}
我正在使用 Maatwebsite\Excel
导入一个 csv 文件以将新用户存储在数据库中。如果我已经在数据库中创建了一条记录,其中包含它创建的相同数据并出错。如果记录存在,我该如何更新?
我的导入 class 是:
class UsersImport implements ToModel, WithCustomCsvSettings, WithHeadingRow
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new User([
'firstname' => $row['firstname'],
'lastname' => $row['lastname'],
'email' => $row['email'],
'password' => $row['pass'],
'created_at' => $row['registered'],
]);
}
public function getCsvSettings(): array
{
return [
'delimiter' => ","
];
}
}
您应该实现 WithUpserts
接口。您还需要指定哪个字段应该是唯一的,如果它存在,它将更新记录,否则它将创建新的记录。
假设您的唯一列是电子邮件,将您的代码更改为以下内容:
class UsersImport implements ToModel, WithCustomCsvSettings, WithHeadingRow, WithUpserts
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new User([
'firstname' => $row['firstname'],
'lastname' => $row['lastname'],
'email' => $row['email'],
'password' => $row['pass'],
'created_at' => $row['registered'],
]);
}
public function getCsvSettings(): array
{
return [
'delimiter' => ","
];
}
public function uniqueBy()
{
return 'email';
}
}