2011-07-31 82 views
1

我想弄清楚如何在PHP中建模數據庫關係。比如說我有一個User類和一個Book類。用戶有許多書籍(一對多)。PHP MVC數據庫關係對象

我在,你可以做框架已經看到,

$書=的getUser($ ID) - > getBooks(); 使用$ id檢索屬於用戶的所有書籍。

所以我想過這樣做,要麼(我不想使用框架或ORM), 1.獲取用戶第一 2.獲得屬於用戶 書(二SQL查詢) 或 1 。使用sql連接查詢獲取屬於用戶的所有書籍。

我想這是通用的,所以它可以適用於很多不同的場景,比如說。用戶有很多書,書有很多評論等等。

在此先感謝。 john

回答

1

做一些通用的操作叫做ORM(比如Doctrine),很難創建一個。

如果你想創建你的,一個簡單的方式開始是使用proxy objects到模型從數據庫中分離:

<?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()); 
+0

你能否詳細說明你的榜樣?例如,我如何使用這個類?你能向我們展示一個例子嗎? – Bytemain