CakePHP:key“的重复输入;初级';对于shell脚本
我正在创建一个房地产网站,每个清单都附有清单ID。我正在通过CakePHP中的shell运行一个脚本,该脚本正在解析csv文件,并且应该更新任何已经存在的列表,或者插入一个新的列表(如果不存在) 问题是,我一直在为键“PRIMARY”获取一个重复条目“#####”其中####是CSV提供的列表ID。此脚本是从命令行运行的 以下是我的表格的较小版本:CakePHP:key“的重复输入;初级';对于shell脚本,php,mysql,cakephp,cakephp-2.0,rets,Php,Mysql,Cakephp,Cakephp 2.0,Rets,我正在创建一个房地产网站,每个清单都附有清单ID。我正在通过CakePHP中的shell运行一个脚本,该脚本正在解析csv文件,并且应该更新任何已经存在的列表,或者插入一个新的列表(如果不存在) 问题是,我一直在为键“PRIMARY”获取一个重复条目“#####”其中####是CSV提供的列表ID。此脚本是从命令行运行的 以下是我的表格的较小版本: CREATE TABLE `listings` ( `ListingID` int(11) NOT NULL, `Accessibility
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';
)
下面是我通过命令行运行的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'
。我尝试在数据库中将ListingID设置为自动增量
,但没有成功
有人有什么想法吗?我很新鲜。设置列表ID什么都不做
这是你的问题:
$this->Listing->ListingID=$entry['ListingID'];
无论数据库中实际的主键字段是什么,主键值总是使用Model->id
属性指定。因此,将其更改为:
$this->Listing->id = $entry['ListingID'];
你不需要打电话
无需显式检查是否存在具有特定主键值的记录。如果传递到save()
的数据数组包含数据库中存在的有效主键值,则Cake将自动更新并记录,而不是创建新的记录。只需确保调用create()
如果在循环中使用save()
,则在保存之前。设置ListingID不起任何作用
这是你的问题:
$this->Listing->ListingID=$entry['ListingID'];
无论数据库中实际的主键字段是什么,主键值总是使用Model->id
属性指定。因此,将其更改为:
$this->Listing->id = $entry['ListingID'];
你不需要打电话
无需显式检查是否存在具有特定主键值的记录。如果传递到
save()
的数据数组包含数据库中存在的有效主键值,则Cake将自动更新并记录,而不是创建新的记录。只需确保调用create()
在保存之前,如果在循环中使用save()
。不要打破CakePHP惯例,请使用“id”字段作为主键
不要打破CakePHP惯例,使用“id”字段作为主键
我在运行cakePHP shell脚本时遇到了相同的错误,结果发现最新记录的ID处于列大小允许的最大值(创建表的人使用了中间int作为ID列),因此自动增量不起作用。更改了列以允许修复更大的数字。这可能是显而易见的,但可能会对其他人有所帮助。我在运行cakePHP shell脚本时遇到相同的错误,结果是最新记录的ID处于列大小允许的最大值(制作该表的人在id列中使用了中整数),因此自动增量不起作用。更改了列以允许修复较大的数字。可能是一些明显的问题,但可能会对其他人有所帮助。但这样做的问题是,我得到了错误
列未找到:1054未知列'Listing.id'位于'where子句'
中,请确保正在加载模型文件。在troller放置了一个调试(get_class($this->Listing))
,如果它返回“AppModel”而不是“Listing”,这意味着您可能错误地命名了您的模型文件,并且没有加载它。它返回的是AppModel
。我是否使用public$uses=array('Listing')在我的shell脚本中正确地调用了模型
?另外,我已经检查了一个我的模型文件LisingModel.php
的名称是否正确。好吧,我是个白痴。它应该是Listing.php而不是ListingModel.php。这就是我整天从CakePHP跳到CodeIgniter的结果。谢谢;)您是否介意包括您关于检查模型文件命名是否正确的建议,以便我可以接受您的答案?这不是第一次有人犯这样的错误。我谴责模型文件的非直观命名约定。用户通常创建的大多数其他类类型在filename expect models中都有类类型后缀。问题是当我这样做的时候,我在where子句中得到错误列notfound:1054 Unknown Column'Listing.id'
确保模型文件正在加载。如果它返回“AppModel”而不是“Listing”,则在控制器中放入调试(get_class($this->Listing))
“这意味着您的模型文件可能命名不正确,并且没有加载。它正在返回AppModel
。我是否在上面的shell脚本中使用public$uses=array('Listing')调用模型时出错代码>?此外,我还检查了一个我的模型文件LisingModel.php
的名称是否正确。好吧,我是个白痴。它应该是Listing.php而不是ListingModel.php。这就是我整天从CakePHP跳到CodeIgniter的原因。谢谢;)你介意把你关于检查模型文件命名是否正确的建议包括在内吗?这样我就可以接受你的答案了。这已经不是第一次有人犯这样的错误了。我指责模型文件的非直观命名约定。用户通常创建的大多数其他类类型在filename expect models中都有类类型后缀。我通过更新模型中的主键解决了这个问题$primaryKey='ListingID'
我通过更新模型中的主键解决了这个问题<代码>$primaryKey='ListingID'