2016-12-01 3 views
1

Я пытаюсь десериализовать таблицу SQL в коллекцию объектов в PHP, и я теряюсь относительно того, как я могу это сделать.Deserializing SQL-таблица для коллекции объектов

В C# эквивалент будет:

public class Object 
{ 
    public string objectProperty { get; set; } 
    public string anotherProperty { get; set; } 
} 

public void Deserialize() 
{ 
    List<Object> collection = new List<Object>(); 

    // Assuming that we have an SQL statement returning a row 

    foreach (Row row in returnedSqlRow) 
    { 
     collection.Add(new Object 
     { 
      objectProperty = row["objectProperty"], 
      anotherProperty = row["anotherProperty"] 
     }); 
    } 
} 

, который дал бы мне хорошую коллекцию Objects работать.

В моем PHP я следующее:

class Book { 
    public $CN; // cataloguenumber 
    public $title; 
    public $author; 
    public $description; 
    public $price; 
    public $enteredby; 
} 

с моей SQL заявление существа:

$books = pg_query($conn, 'SELECT cataloguenumber, title, author, description, price, enteredby FROM CSBooks');

можно легко получить доступ к каждому значению из ряда, как так:

while($row = pg_fetch_row($books)) { 

     echo $row[0] . '<br>'; 
     echo $row[1] . '<br>'; 
     echo $row[2] . '<br>'; 
     echo $row[3] . '<br>'; 
     echo $row[4] . '<br>'; 
     echo $row[5] . '<br>'; 
    } 

Но я потерял то, как я могу создать коллекцию объектов, и d eserialize строки к объекту Book и сохраните его. Есть ли эквивалент PHP? Я взглянул на pg_fetch_object(), но это не совсем то, что я ищу.

ответ

1

Я думаю, что решение заключается в использовании PDO и PDOStatement::fetchObject, которые будут абстрагировать все функции pg_ * и упростить управление db.

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

Там будет грязное решение, если вам действительно нужно использовать PG_ * функции вместо PDO ... (Стыдно предложить его)

$a = ['a'=>'bla', 'b'=>1]; 
$shame = (object) $a; 

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

+0

Отлично, спасибо большое! –

Смежные вопросы