一般的なことを行うことは ORM ( Doctrineなど) と呼ばれ、作成するのは非常に困難です。
独自のモデルを作成する場合、簡単に開始するには、プロキシ オブジェクトを使用してモデルをデータベースから分離します。
<?php
class User
{
protected $id;
protected $books;
public function getBooks()
{
return $this->books;
}
public function fromArray(array $data)
{
if (isset($data['id'])) {
$this->id = $data['id'];
}
}
}
class Book
{
protected $id;
protected $name;
public function fromArray(array $data)
{
if (isset($data['id'])) {
$this->id = $data['id'];
}
if (isset($data['name'])) {
$this->name = $data['name'];
}
}
}
class UserProxy extends User
{
public function getBooks()
{
$userId = $this->id;
$booksArr = // do sql query to fetch books belongs to $userId
$books = array();
foreach ($booksArr as $bookArr) {
$book = new Book();
$book->fromArray($bookArr);
$books[] = $book;
}
$this->books = $books;
parent::getBooks();
}
}
私の例を次のように改善できます。
クラスを使用してコレクションを管理します ( Doctrine\Common\Collections\ArrayCollectionのようなもの)
fromArray
(メソッドの代わりに) リフレクションを使用します。
編集:
例を次に示します。
<?php
$userArr = // fetch your user from database (with an associative array)
$user = new User();
$user->fromArray($userArr);
var_dump($user->getBooks());