我正在尝试更新数据库中一个字段中的多条记录。由于某种原因,我一直收到SQL错误:1054:"字段列表"中的未知列"520947b9"。502947B9是我的ID的一部分。我不明白为什么该值被视为字段列表。这是我的密码。也就是说,我不确定我是否正确更新了这些记录。如果我没有,请给我指出来。谢谢!!
public function findPolicyIds($coverageId = null) {
$policyid = $this->Policy->find('all', array(
'recursive' => -1,
'conditions' => array('Policy.coverage_id' => $coverageId),
'fields' => array('Policy.id')));
foreach($policyid as $id) {
$all[] = $id['Policy']['id'];
foreach ($all as $key) {
$this->Policy->Declination->updateAll(
array('Declination.policy_id' => $key),
array('Declination.coverage_id <=' => $coverageId)
);
}
}
}
以下是我的错误
查询:UPDATE declinations
AS Declination
LEFT JOIN policies
AS Policy
ON(Declination
.policy_id
=Policy
.id
)SET Declination
。policy_id
=520947b9-0210-4067-94ea-70f8ae78509d,其中Declination
。coverage_id
<='520947b9-1fa0-45db-992e-70f8ae78509d'
查询:UPDATE declinations
AS Declination
LEFT JOIN policies
AS Policy
ON(Declination
.policy_id
=Policy
.id
)SET Declination
。policy_id
=520947b9-0694-4724-b53-70f8ae78509d,其中Declination
。coverage_id
<='520947b9-1fa0-45db-992e-70f8ae78509d'
从查询的外观来看,updateAll
没有将$key
识别为字符串。可以按此方式强制转换,也可以自己添加'
字符。示例:
$this->Policy->Declination->updateAll(
array('Declination.policy_id' => "'".$key."'"),
array('Declination.coverage_id <=' => $coverageId)
);
这就是SQL错误。
现在
"也就是说,我不确定我是否正确更新了这些记录。"
好吧,你想做什么?在阅读代码时,您将获得一个Policy的id数组,并使用coverage_id <= $coverageId
更新所有Declination,这没有多大意义,因为foreach正在为相同的条件更新Policy_id,所以最终您将感知到最后一个更改:覆盖率_id等于或小于$coverage_id
的每个Declination上foreach的最后一个Policy_id。。。。对我来说没有多大意义,甚至不知道你需要做什么。
基于SQL,假设您使用的是ORM,在我看来,policy_id在您的Declination模型中被定义为一个数字字段,而实际上它需要是一个字符串。Coverage_id字段工作正常,因此请比较这两个定义。