加入用户表w / posts并为每个用户创建一个实例

时间:2009-11-01 12:06:24

标签: php mysql

假设我正在构建评论摘要,需要作者的评论数据和用户数据。注释由Comment类表示。用户由User类表示。在提取评论时,$author的{​​{1}}成员应设置为Comment的实例(以保留有关作者的所有信息)。

User

我现在怎么做......

到目前为止,我一直在做的方法是加入表格,只提取我需要的基本用户数据......如果任何列名称冲突,我设置一个别名(class Comment { var $id; var $body; var $timestamp; var $etc; var $authorid; var $author; //(a 'user' instance) static function fromArray($members){ /*...*/ } } class User { var $id; var $username; var $haspicture; var $etc; static function fromArray($members){ /*...*/ } } )。这是基本的外观:

field AS somethingelse

要创建$query = mysql_query('SELECT c.*, u.username AS author_username, u.haspicture AS author_haspicture FROM comments c JOIN user u ON u.id = c.authorid'); while ($row = mysql_fetch_array($query, MYSQL_ASSOC)){ $comment = Comment::fromArray($row); } ...每行提供的评论$author方法如下所示:

fromArray()

所以这是我的问题:

我错过了什么吗?必须有一个更好的方法来做到这一点。这种方式似乎非常不灵活,并且当表更改或static function fromArray($members){ foreach($members as $field => $value){ $this->$field = $value; } $this->author = User::fromArray(array( 'id' => $row['authorid'], 'username' => $row['author_username'], 'haspicture' => $row['author_haspicture'] )); } 方法更改并最终需要查询未提供的字段时,容易破坏。每个用户的单独查询都不是一个选项......可以吗?


(ps请记住,User对象比这更复杂,并且它有更多的方法,这些方法稍后在显示注释时调用。它不能被合理地展平并被视为数组。 OO设置非常必要。)

1 个答案:

答案 0 :(得分:1)

如果我是你,我会看看周围的一些ORM工具,这里有一个很好的可用于PHP的综合:

Good PHP ORM Library?