我正在努力解决这类问题,我无法通过Google直接回答我的问题。
假设我们在数据库中有一个表'users',它包含以下列:id, username, password, real_name
。
然后我的问题就开始了。
我知道我们可以为此创建一个独立的课程:
class User
{
private $_id;
private $_username;
private $_password;
private $_real_name;
// getters
// setters
}
现在,我应该在该类上添加fetchById等函数吗?我的意思是,这是一个好习惯吗?
public function fetchById($id)
{
// validate param
// query database
// copy results to appropriate properties
}
或者应该由另一个类完成,比如UserManager?然后对于每个结果,我们将数组结果转换为该对象?
此外,我应该在哪里放置像fetchUsers这样的函数来从数据库中获取多个用户?处理同一实体的多个记录的函数。
我正在寻找代码效率和性能。
我知道'一些'想法,但我无法证明这一点。我需要帮助。
我目前正在使用CodeIgniter,但我认为这个问题通常是PHP OOP。
答案 0 :(得分:1)
就我个人而言,我的模型(表示数据库表的对象)扩展了一个具有ID attirbute和共享静态函数(如fetchById())的abstractModel对象。这个抽象模型还有像save()这样的方法,它们使用要保存的对象的ID。
您不必在表中包含“id”字段,模型的ID只需是表中唯一的键字段之一。
我在抽象类中有一个通用的loadAll()静态函数,而不是fetchUsers()。因此,您可以调用Users :: loadAll()来获取用户的所有模型。这意味着您的大多数模型都可以以相同的方式连接,并减少重复的代码。当然,如果有特定于模型的方法,那么您需要在子模型中定义它们。
答案 1 :(得分:0)
为表管理构建一个类,为实体构建另一个类。
请参阅其他ORM,如doctrine,propel或框架ORM,如cakephp。