2011-03-05 7 views
1

私は、MySQLのテーブル "コンテンツ"からすべてのデータを私に提供する必要があるクラスを作っています。オブジェクトコレクション

データをオブジェクトとして返すようにしたいとします。 これまでは1つのオブジェクトを返すことができましたが、データベースからのすべての行を返すオブジェクトコレクションを取得したいと考えています。

<? 
class ContentItem { 
public $id; 
public $title; 
public $subtitle; 
public $conent; 
public $intro_length; 
public $active; 
public $start_date; 
public $end_date; 
public $views; 

static function getContentItems() {  
    $query = "SELECT * FROM content"; 

    $result = mysql_query($query)or die(mysql_error()); 
    $item = new ContentItem(); 
    while ($data = mysql_fetch_object($result)) { 
      $item = $data;        
    } 
    return $item;   
    } 
} 

答えて

1

あなたのループがitemdataを上書きし続ける、とnew ContentItem()はすぐに上書きされます。 「オブジェクトコレクション」で、あなたが意味する場合は、「配列を、」それは非常に簡単です:おそらく(

$items = array(); 
while ($data = mysql_fetch_object($result)) { 
    $items[] = $data; 
} 
return $items; 

独自のカスタムオブジェクトのコレクションを返したい場合は、コレクションクラスを定義し、そのコレクションに$たびにデータを追加します配列にも格納されています)。

1

単純な解決策は配列です。私はまた、あなたがオブジェクトを作成する必要がコレクションの場合foreach

foreach ($items as $item) { 
    // do something with $item 
} 
5

使用することができ、あなたが後でアイテムで作業したい場合は$データ

$items = array(); 
while ($data = mysql_fetch_object($result)) { 
     $items[] = new ContentItem($data); 
} 
return $items; 

の各セットから作られたのContentItemをしたいと仮定しますIterator interfaceを実装しています。あなたは配列、オブジェクト、またはあなたが望むものでそれを埋めることができます。 Iteratorこのコレクションはforeach以降のループで使用できることをご確認ください。

さらに、コードに間違いがあります。 $itemを何度も上書きしています。それぞれのwhileのサイクル(すでにtanduと書いてあります)に記入される配列(または前述のようにIteratorが実装されたオブジェクト)を作成する必要があります。

関連する問題