Zend Framework: Zend_Db_Table_Rowset nesne veri satırlarını unset nasıl

4 Cevap php

Ben bir Zend_Db_Table_Rowset nesnesinde saklanan veri satırları üzerinde yineleme gibi ve belli kriterleri yerine yoksa o, unset / satır bazı damla olur.

Ben nesneden sadece veri satırlarını almak için toArray () kullanabilir ve daha sonra ihtiyacım yok satırları unset kolay olurdu. Ben daha fazla kullanım için benim nesneyi tutmak istiyorum çünkü Ama bunu yapmak istemiyorum.

Elbette bir çözüm Sadece ihtiyacım olanı almak için benim sorgu ayarlamak olurdu, ama bu senaryoda mümkün değil. En azından ben biliyorum olmaz.

Ben işe yaramadı aşağıdaki çalıştı:

foreach ($rowset as $key => $row)
{
    if (!$condition == satisfied)
    {
        unset($rowset[$key]);
    }
}

Hiçbir $ satır [$ key] olmadığından ve tabii ki, çalışmıyor ... veri altdizilim saklanır [_data: protected] ama unset $ satır [_DATA: protected] [$ key] vermedi ya çalışmaz.

Belki bir satır kümesi nesnesi (veya genel olarak nesnelerin temsili) benim anlayışı ne yapıyorum anlamak için yeterince olgun değildir. Herhangi bir açıklama ve ipuçları hoş olurdu!

[EDIT] $row->delete is NOT an option, I don't want to delete the row from the database! I don't want to create an array first, if I wanted to I would just do $rowset->toArray() [/EDIT]

Solution: Gezmeye ilk sorgu içine her şeyi entegre anlam, çok mümkün değildi düşündüğüm yapıyor sona erdi.

4 Cevap

Bir custom Rowset class kullanabilirsiniz

Bu sınıf dahili olarak saklanan korunan $ _rows sonra erişim olurdu ve sizin filtreleme uygulayarak için genel bir yöntem ekleyebilirsiniz

Sizin için örnek yöntemi custom rowset class:

public function removeFromRowset($id) {
    foreach ($this->_rows as $i => $v) {
        if ($v->id == $id) { // found Row we want to remove
            unset($this->_rows[$i]); // delete both rowset
            unset($this->_data[$i]); // and original data
            break; // not necessary to iterate any more
        }
    }
    $this->_data = array_values($this->_data); // reindex both arrays (otherwise it breaks foreach etc.)
    $this->_rows = array_values($this->_rows);
    $this->_count = count($this->_data); // don't forget to update items count!
}

Bu satır kümesi yoluyla yineleme, onun kimliği (benzersiz bir tanımlayıcı "id" olduğunu varsayarak) ve satır kümesi çıkarın daha uygun Satır bulur.

Please note this doesn't delete the row from database, it just removes it from the Rowset!

Bunu yapmak için bir yol olduğunu bilmiyorum. Önce bir dizi oluşturmak ve ardından diziyi değiştirebilir.

$rows = array();
foreach($rowset as $row)
{
     $rows[$row->id] = $row;
}

foreach ($rows as $key => $row)
{
     if(!$condition == satisfied)
     {
         unset($rows[$key]);
     }
}

En verimli bir şey yapmak için ama o işler değil.

Ayrıca tek satır nesne üzerinde silme () yöntemini kullanabilirsiniz.

foreach ($rowset as $row)
{
    if (!$condition == satisfied)
    {
       $row->delete();
    }
}