删除只读Zend行

时间:2009-08-29 22:46:12

标签: zend-framework zend-db-table delete-row

是什么导致一行(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数组中没有的行,但是它会抛出一个错误,说明该行是只读的。我没有设置那个标志或用行做任何事情。知道为什么它是只读的吗?

1 个答案:

答案 0 :(得分:3)

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

例如,如果$select涉及JOINGROUP BY,则在更改行中字段的值时,不清楚哪些行会受到影响宾语。

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

请记住,Zend_Db的所有内容都不到3000行代码。它不可能有很多魔力。

如果你已经序列化然后反序列化了行对象,那么它也可以是readOnly。