是什么导致一行(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数组中没有的行,但是它会抛出一个错误,说明该行是只读的。我没有设置那个标志或用行做任何事情。知道为什么它是只读的吗?
答案 0 :(得分:3)
如果$select
阻止您直接将字段映射回单个原始行,则只读取行。
例如,如果$select
涉及JOIN
或GROUP BY
,则在更改行中字段的值时,不清楚哪些行会受到影响宾语。
您可能会说“我知道哪一行是来源,为什么Zend_Db_Table_Row
无法告诉?”但是有很多极端情况,所以一般来说这是一个很难解决的问题。
请记住,Zend_Db
的所有内容都不到3000行代码。它不可能有很多魔力。
如果你已经序列化然后反序列化了行对象,那么它也可以是readOnly。