2

我有一个文本字段,其中包含例如以下文本:-

“一种传统的英式菜肴,包括约克郡布丁面糊中的香肠,通常与蔬菜和肉汁一起食用。”

此文本字段采用一种仅使用其 ID 更新项目记录的形式。如果我编辑部分文本字段并替换“和肉汁”。用“幽默”。这样文本字段现在包含

“一种传统的英式菜肴,包括约克郡布丁面糊中的香肠,通常与蔬菜和幽默一起食用。”

我得到以下异常: -

致命错误:C:\Projects\nitrous\lightweight\system\database\Doctrine\Query\Abstract.php:780 中未捕获的异常 'Doctrine_Query_Exception' 和消息 'Unknown component alias humous' 堆栈跟踪:C:\Projects\nitrous\lightweight \system\database\Doctrine\Query\Abstract.php(767): Doctrine_Query_Abstract->getQueryComponent('humous') C:\Projects\nitrous\lightweight\system\database\Doctrine\Query\Set.php(58): Doctrine_Query_Abstract ->getAliasDeclaration('humous') C:\Projects\nitrous\lightweight\system\database\Doctrine\Query\Abstract.php(2092): Doctrine_Query_Set->parse('i.details = 'A ...') C :\Projects\nitrous\lightweight\system\database\Doctrine\Query.php(1058): Doctrine_Query_Abstract->_processDqlQueryPart('set', Array) C:\Projects\nitrous\lightweight\system\database\Doctrine\Query\Abstract.php(971): Doctrine_Query->getSqlQuery(Array) C:\Projects\nitrous\lightweight\system\database\Doctrine\Query\Abstract.php( 1030): Doctrine_Query_Abstract->_execute(Array) C:\Projects\nitrous\lightweight\system\appl 在 C:\Projects\nitrous\lightweight\system\database\Doctrine\Query\Abstract.php 在第 780 行

如果有人感兴趣,我正在使用与 CodeIgniter 1.7.0 挂钩的 Doctrine 1.0.6。

我实际执行更新的学说查询如下所示:-

public function updateItems($id, $arrayItem) {
    $query = new Doctrine_Query();
    $query->update('Item i');

    foreach($arrayItem as $key => $value) {
        $query->set('i.'.$key, "'".$value."'");
    }

    $query->where('i.id = ?', $id);
    return $query->execute();
}

这看起来很奇怪,因为如果我替换整个字符串“约克郡布丁面糊中的传统英式菜肴,通常与蔬菜和幽默一起食用。” 对于完全不同的东西,比如“测试”,它不会抛出异常并且工作得很好。这让我感到困惑......它是 Doctrine 中的错误还是我错过了什么?

4

2 回答 2

2

很明显,Doctrine 认为

  1. 你给它“幽默”,而不是包含“幽默”的长字符串,并且
  2. 那个“幽默”不是数据,而是一个别名。

我会怀疑你正在对数据字符串做你认为你正在做的事情。Doctrine 中是否有设置让它转储它生成的实际 SQL?

于 2009-05-20T16:48:55.507 回答
0

我找到了解决我自己问题的方法。看来这是 Doctrine 1.0.6 中的一个已知错误。我已经升级到 Doctrine 1.1.1,这似乎已经解决了这个问题。

我建议尝试不同版本的 Doctrine,看看这是否也能解决您的问题!感谢您回答人们,如果你这样做了。

于 2009-05-21T16:59:36.230 回答