1

是什么导致行 ( Zend_Db_Table_Row) 设置为“ readOnly?” 我在循环中删除行时遇到问题:

// this is set to some integers
$ids = array();

// get the results
$results = $table->fetchAll($select);

foreach ($results as $result)
{
    $value = $result->value;
    if (!in_array($value, $ids))
    {
        // throws a "row is read-only" error
        $result->delete();
    }   
}

这是我的选择:

$table = $options->joinModel;
$select = $table->select();
$select->from($table->getTableName(), array("id", "value" => $options->joinForeignKey))
       ->where("`{$options->foreignKey}` = ?", $row->id)
       ->group($options->joinForeignKey);

我想删除不在 $ids 数组中的行,但它会抛出一个错误,指出该行是只读的。我没有设置那个标志或对行做任何事情。知道为什么它是只读的吗?

4

1 回答 1

3

$select如果阻止您将字段直接映射回单个原始行,则该行是只读的。

例如,如果$select涉及 aJOIN或 a GROUP BY,则如果更改行对象中的字段值,则不清楚哪些行会受到影响。

你可能会说“知道哪一行是源,为什么不Zend_Db_Table_Row知道?” 但是有很多极端情况,所以一般来说这是一个很难解决的问题。

请记住,所有Zend_Db代码都在 3000 行以下。它不可能有太多的魔法。

如果您已经序列化然后反序列化,行对象也可以是只读的。

于 2009-08-29T22:58:49.570 回答