如果数据表中的一个类和记录是对象,那么连接呢?

时间:2012-04-30 14:07:40

标签: php database oop orm

我在php中知道在课堂上拥有数据库表是一种很好的做法。所以,

$myTable = new DbTable_Users();
$res = $myTable->doQuery();
.
.
$res->getID();
$res->getNAME();

但如果我看到结果集,则可以有JOIN,所以混合字段。一个类不能扩展2个类。然后如何躲闪这个?

$res = Factory::doQuery ('SELECT * FROM A LEFT JOIN B ON A.ID = B.ID');
// A fields => ID, FIELD1, FIELD2
// B fields => ID, DATE, FIELD2

$res->getID();    - **now which field?? A.ID or B.ID** ??

2 个答案:

答案 0 :(得分:1)

有各种方法可以设计所谓的复合模型(其中某些字段可能实际上与另一个表相关)。

对我来说,最明确的方法是将数据库表/映射器设计为一种类型的类,而将域模型设计为另一种类的类;后者将使用前者作为构建块。

答案 1 :(得分:1)

我自己对如何处理和组织此类数据的意见:

您的DbTable_Users对象应该是User个对象。它应包含有关一个用户的信息(可能是数据库中的一行数据)。您可能希望为用户对象集合设置Users(复数)对象。但是,array($user1, $user2, $user3)可能对您有用。

假设您有一个Post对象用于用户发布的内容。并且,您希望获得用户发布的所有信息及其所有信息。通常,这将是某种连接查询:

SELECT * FROM users INNER JOIN posts ON users.id = posts.user_id WHERE users.id = 1;

在内部,这将创建一个User个对象和多个Post个对象来表示从连接返回的数据。您可以通过$user->posts访问此信息。