【问题标题】:Cakephp SQL Error 1054 Unknown Column In The Field ListCakephp SQL 错误 1054 字段列表中的未知列
【发布时间】:2013-08-12 21:18:37
【问题描述】:

我正在尝试更新数据库中一个字段中的多条记录。出于某种原因,我不断收到 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=.Declination.@28 -0210-4067-94ea-70f8ae78509d 其中Declination.coverage_id

查询:UPDATE declinations AS Declination LEFT JOIN policies AS Policy ON (Declination.policy_id = Policy.id) SET Declination.Declination.@987 -0694-4724-b353-70f8ae78509d 其中Declination.coverage_id

【问题讨论】:

    标签: php cakephp cakephp-1.3


    【解决方案1】:

    根据您的查询,updateAll 没有将$key 识别为字符串。要么这样投射,要么自己添加' 字符。示例:

    $this->Policy->Declination->updateAll(
              array('Declination.policy_id' => "'".$key."'"),
              array('Declination.coverage_id <=' => $coverageId)
            );
    

    这是 SQL 错误。

    现在

    “也就是说,我不确定我是否正确更新了这些记录。”

    ...好吧,你想做什么?阅读您的代码,您将获得一组 Policy 的 ID,并使用 coverage_id &lt;= $coverageId 更新所有 Declinations,这没有多大意义,因为该 foreach 正在针对相同的条件更新 policy_id,因此最终您将感知到最后一次更改:每个 Declination 上 foreach 的最后一个 policy_id,coverage_id 等于或小于 $coverage_id.... 对我来说没有多大意义,即使不知道你需要做什么。

    【讨论】:

    • $key 是一个索引数组。我试图遍历该数组并保存每个实例的 id。我要回去修改我的代码。就是说,谢谢Nunser!你总是跳进来给我一些方向!我真的很感激!
    • @SkillSet,没问题:)。 $key 是一个索引数组,但您没有在任何地方使用索引,而且索引是一个数字,乍一看并没有真正与任何东西相关,这令人困惑。如果您不更改更新条件,则该 foreach 只会在每个循环上覆盖。如果您向我们提供更多背景信息和您想做的事情,也许我们可以为您提供更多帮助。
    • 我想更新所有传入的具有相同 CoverageId 的 Declinations.Policy_Id。
    • 用什么更新它?现在您一遍又一遍地更新相同的偏角,唯一的结果是带有coverage_id <=。
    • 好的,但是看。假设您有 3 个具有该覆盖范围 ID 的保单。你也有 1 偏角与该覆盖 id。那么在更新声明表时,Declination.policy_idcolumn 中不能有 3 个策略 ID。您必须选择一个或更改 hasMany o HABTM 的声明和策略之间的关系。
    【解决方案2】:

    基于 SQL 并假设您使用的是 ORM,在我看来,policy_id 在您的 Declination 模型中被定义为一个数字字段,而它确实需要是一个字符串。 Coverage_id 字段工作正常,所以比较两个定义。

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2016-02-09
      相关资源
      最近更新 更多