选择数据库行并将它们视为对象

时间:2012-01-21 17:29:06

标签: php database

我正在开发一种“模型”,其中我希望能够通过构造函数选择几行(或仅一行),然后能够将它们视为对象,例如,选择所有将“admin”作为作者且限制为10的帖子将是:

$posts = new Post(array(
    'where' => array('author' => 'admin'),
    'limit' => array(0 => 10),
    # optional: 'order' => array($by => 'desc/asc')
));

# get a field
$id = $posts->row[0]['id'];

# editing fields
$posts->row[1]['body'] = 'new body';
$posts->row[2]['body'] = 'new body for post # 3';
$posts->update();

# delete all the selected posts
$posts->delete();

... et cetera.

但我不喜欢它选择帖子的方式。它看起来太机械而且在阵列中充满了我不喜欢的数组。 我还想过“一个对象是一行”,但这需要10个帖子来执行10个不同的查询。那效率不高。

问题#1 是否有类似的模式或类似的脚本可以激励我?我是第一个认为数据库行可以被视为PHP对象的人(与此概念一起出现的所有专业人员)。

问题#2 可能有另一种选择多行的方法吗?可以是一个强制开发人员只指定表的主键(例如post id)作为选择器的解决方案吗? (< =我认为这根本不是解决办法。)

2 个答案:

答案 0 :(得分:2)

大多数ORM(对象关系映射器)尝试以一种或另一种方式回答您的问题。

我建议您查看DoctrinePropel以获取想法。此外,很高兴看到其他语言,例如Microsoft的LINQ for .NET。

我自己,我最近发布了一个名为Solid Oxygen的PHP ORM。如果需要,请查看文档。我相信我所做的与你试图发展的非常接近。

答案 1 :(得分:1)

是的,有些人之前已经想过这个。您有大量的PHP框架将数据库条目作为对象处理。您可以查看Code IgniterCakePHPSymfony。这是一个个人意见,但我认为Code Igniter源代码更容易理解,并且它可以为实现整个对象层提供良好的基础,如果您仍然想要实现一个,在您意识到它可能有多麻烦之后: )