我正在创建一个房地产网站,每个列表都附加了列表 ID。我正在通过 CakePHP 中的 shell 运行一个脚本,该脚本正在解析一个 csv 文件,并且应该更新任何已经存在的列表,或者如果不存在则插入一个新列表。
问题是我不断得到一个Duplicate entry '###' for key "PRIMARY'
where ### 是 CSV 提供的列表 ID。此脚本正在从命令行运行。
这是我的表包含的较小版本:
CREATE TABLE `listings` (
`ListingID` int(11) NOT NULL,
`AccessibilityYN` varchar(50) DEFAULT NULL COMMENT 'AccessibilityYN',
`BathsFull` int(6) DEFAULT NULL COMMENT 'BathsFull',
`BathsPartial` int(6) DEFAULT NULL COMMENT 'BathsPartial',
`BathsTotal` decimal(5,1) DEFAULT NULL COMMENT 'BathsTotal',
`Beds` int(11) DEFAULT NULL COMMENT 'Beds',
PRIMARY KEY (`ListingID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这是我的列表模型(注意我有public $primaryKey = 'ListingID';
)
class Listing extends AppModel {
public $name = 'Listing';
public $primaryKey = 'ListingID';
public $belongsTo = array(
'Agent' => array(
'className' => 'Agent',
'foreignKey' => 'AgentID'
)
);
}
这是我通过命令行运行的 shell:
class MyShell extends AppShell {
public $uses = array('Listing');
public function update_imported_listings() {
/***SOME CODE HERE TO GET THE $entry FROM THE CSV***/
$this->Listing->ListingID = $entry['ListingID'];
if(!$this->Listing->exists()){
$this->Listing->create();
}
if($this->Listing->save($entry)){
echo "Saved Listing";
} else {
echo "Listing Failed";
}
}
}
我知道 CakePHP 通常喜欢id
作为数据库中使用的字段,但是我已经$primaryKey = 'ListingID'
在我的模型中设置了。我尝试Auto Increment
在数据库中将 ListingID 设置为,但这没有用。
有人有什么想法吗?我很新鲜。