各リストにリストIDが添付された不動産ウェブサイトを作成しています。csvファイルを解析しているCakePHPのシェルを介してスクリプトを実行しており、既存のリストを更新するか、存在しない場合は新しいリストを挿入する必要があります。
問題はDuplicate entry '###' for key "PRIMARY'
、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'
)
);
}
コマンドラインから実行しているシェルは次のとおりです。
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";
}
}
}
id
CakePHPは通常、データベースで使用されるフィールドであることが好きであることを理解しています$primaryKey = 'ListingID'
が、モデルで設定しました。DBでListingIDを設定しようとしましAuto Increment
たが、うまくいきませんでした。
誰かアイデアはありますか?私は新鮮です。