2009-04-18 39 views
4

我想迭代存儲在Zend_Db_Table_Rowset對象中的數據行,然後刪除/取消設置某些行(如果它們不符合特定條件)。Zend Framework:如何取消設置Zend_Db_Table_Rowset對象中的數據行

我可以使用toArray()從對象中只獲取數據行,然後很容易取消我不需要的行。但因爲我想保留我的對象以供進一步使用,所以我不想那樣做。

當然,一個解決方案是調整我的查詢,以便只檢索我需要的東西,但在這種情況下這是不可能的。至少我不知道如何。

我試過,沒有工作的情況如下:

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

當然,這是行不通的,因爲沒有$行集[$關鍵] ...的數據存儲在一個子陣列[_data:protected]但未設置$ rowset [_data:protected] [$ key]也不起作用。

也許我對行集對象的概念(或者一般對象的表示)還不夠成熟,無法理解我在做什麼。任何澄清和技巧將受到歡迎!

[編輯] $ row-> delete不是一個選項,我不想從數據庫中刪除該行! 我不想先創建一個數組,如果我想我會只是做$ rowset->指定者() [/編輯]

解決方案:最後我做什麼,我想我沒」這也意味着我將所有內容整合到最初的查詢中。

回答

4

你可以使用一個custom Rowset class

這個類必須再接入內部存儲受保護$ _rows,你可以將一個公共的方法來將您的過濾

1

我不知道有一種方法可以做到這一點。你可以先創建一個數組,然後修改數組。

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

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

不是最有效的做法,但它的工作原理。

+0

不,我需要的對象是健康的。並使用$ rowset-> toArray()創建一個數組非常簡單。 – markus 2009-04-18 20:13:07

+0

$ rowset-> toArray()不會生成行對象。它將整個行集作爲數組返回。這就是爲什麼我沒有使用它。 – smack0007 2009-04-19 09:34:49

+0

上面的自定義行集可能是您最好的選擇。 – smack0007 2009-04-19 09:35:29

-2

您還可以對單個行對象使用delete()方法。

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

刪除是破壞性的。該行將從表中刪除。 – 2009-04-18 18:24:42

6

實例方法爲您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! 
} 

它遍歷你的行集,根據它的id找到行(假設「id」是唯一標識符tifier)並將其從Rowset中移除。

請注意,這並不會從數據庫中刪除該行,只是將它從行集中刪除!

相關問題