我试图弄清楚如何在PHP中建模数据库关系。比方说,我有一个User类和一个Book类。用户有很多书(一对多)。
我在框架中看到过你可以做到的,
$ books = getUser($ id) - > getBooks(); 使用$ id检索属于用户的所有图书。
所以我考虑过要么(我不想使用框架或ORM), 1.先让用户 2.获取属于用户的书籍 (两个SQL查询) 要么 1.使用sql连接查询获取属于该用户的所有书籍。
我希望这是通用的,因此它可以适用于许多不同的场景,例如说。用户有很多书,书有很多评论等等。
提前致谢。 约翰
答案 0 :(得分: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)
使用Reflection(而不是fromArray
方法):
修改强>
这是一个例子:
<?php
$userArr = // fetch your user from database (with an associative array)
$user = new User();
$user->fromArray($userArr);
var_dump($user->getBooks());