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フィールドを単一の元の行に直接マッピングできないような場合、行はreadOnlyです。

たとえば、がaまたはa$selectを含む場合、行オブジェクトのフィールドの値を変更した場合に影響を受ける行は明確ではありません。 JOINGROUP BY

「どの行がソースかわかっているのに、なぜわからないのですZend_Db_Table_Rowか?」と言うかもしれません。しかし、コーナーケースが多いので、一般的に解決するのは難しい問題です。

すべてがZend_Db3000行未満のコードであることに注意してください。魔法をたくさん入れることはできません。

行オブジェクトは、シリアル化してから逆シリアル化した場合は、readOnlyにすることもできます。

于 2009-08-29T22:58:49.570 に答える