对 $duplicateChecks 的澄清
Clarification on $duplicateChecks
如果我解释 $duplicateChecks
的工作原理,我想澄清一下。我扩展了 CsvBulkLoader class 如下:
class UserCsvBulkLoader extends CsvBulkLoader{
public $hasHeaderRow = true;
public $columnMap = [
'UserID' => 'UserID',
'FirstName' => 'FirstName',
'LastName' => 'LastName',
'Email' => 'Email',
'Username' => 'Username'
];
public $duplicateChecks = [
'Email' => 'Email'
];
}
我在拥有当前记录的 UserLogin
DataObject 中使用它。例如,我有 1 行信息:1234,"John","Doe","j.doe@example.com","jodoe"
。现在,如果我上传一个包含 1234,"John","Doe","j.doe@example.com","jodoe25"
等信息的 csv 文件,为什么我的当前记录会更新。 $duplicateChecks 是否应该只 return 现有记录而不更新它?还是我遗漏了什么?
好的,经过检查和实验,在CsvBulkLoader
class中的findExistingObject()
方法中使用了$duplicateChecks
。现在,findExistingObject()
方法用于 processRecord()
方法来检查对象是否存在。如果是,则记录中的object/row默认不会被复制而是更新
如果我不希望此对象被复制或更新,那么我需要重写 processRecord()
方法以防它找到匹配的对象(即重复对象)并跳过它。这是我可以用于这种情况的当前解决方案,但也许有更好的方法。
如果我解释 $duplicateChecks
的工作原理,我想澄清一下。我扩展了 CsvBulkLoader class 如下:
class UserCsvBulkLoader extends CsvBulkLoader{
public $hasHeaderRow = true;
public $columnMap = [
'UserID' => 'UserID',
'FirstName' => 'FirstName',
'LastName' => 'LastName',
'Email' => 'Email',
'Username' => 'Username'
];
public $duplicateChecks = [
'Email' => 'Email'
];
}
我在拥有当前记录的 UserLogin
DataObject 中使用它。例如,我有 1 行信息:1234,"John","Doe","j.doe@example.com","jodoe"
。现在,如果我上传一个包含 1234,"John","Doe","j.doe@example.com","jodoe25"
等信息的 csv 文件,为什么我的当前记录会更新。 $duplicateChecks 是否应该只 return 现有记录而不更新它?还是我遗漏了什么?
好的,经过检查和实验,在CsvBulkLoader
class中的findExistingObject()
方法中使用了$duplicateChecks
。现在,findExistingObject()
方法用于 processRecord()
方法来检查对象是否存在。如果是,则记录中的object/row默认不会被复制而是更新
如果我不希望此对象被复制或更新,那么我需要重写 processRecord()
方法以防它找到匹配的对象(即重复对象)并跳过它。这是我可以用于这种情况的当前解决方案,但也许有更好的方法。