Удалить Zend-строку только для чтения - PullRequest
1 голос
/ 30 августа 2009

Что заставляет строку (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 Ответ

3 голосов
/ 30 августа 2009

Строка доступна только для чтения, если $select таков, что не позволяет вам напрямую сопоставлять поля с одной исходной строкой.

Например, если $select включает JOIN или GROUP BY, неясно, какие строки будут затронуты, если вы измените значение поля в объекте строки.

Вы можете сказать: " Я знаю, какая строка является источником, почему Zend_Db_Table_Row не может сказать?" Но есть много угловых случаев, поэтому в целом это сложная проблема.

Имейте в виду, что все Zend_Db содержит менее 3000 строк кода. В нем не может быть много магии.

Объект строки также может быть доступен только для чтения, если вы его сериализовали, а затем десериализовали.

...