【发布时间】:2011-02-11 23:17:06
【问题描述】:
如果没有充分的理由,我不接受概念有点自豪。但我对使用活动记录模式表示怀疑。目前我正在使用zend,但说代码Igniter有活动记录。
我不使用。因为
但活动记录有
rand 函数更改为random,活动记录可以为您完成。
活动记录是否具有我所缺少的更多功能?您能否举一些活动记录可以挽救生命的示例?
【问题讨论】:
标签: php codeigniter orm activerecord
如果没有充分的理由,我不接受概念有点自豪。但我对使用活动记录模式表示怀疑。目前我正在使用zend,但说代码Igniter有活动记录。
我不使用。因为
但活动记录有
rand 函数更改为random,活动记录可以为您完成。
活动记录是否具有我所缺少的更多功能?您能否举一些活动记录可以挽救生命的示例?
【问题讨论】:
标签: php codeigniter orm activerecord
在数据库表或视图中包装一行、封装数据库访问并在该数据上添加域逻辑的对象。
这不是 CodeIgniter 使用的。 CI 的 AR 是 basic query object。
ActiveRecord 的主要优点是简单。如果您的应用程序主要进行简单的 CRUD 操作,并且您的 Table 结构与 ActiveRecord 非常匹配,那么它是一个不错的选择。在这种情况下,很容易抽象出 CRUD。而且您仍然可以向其中添加手工制作的 SQL,以进行某些更复杂的行操作。
class User
{
protected static $dbAdapter;
protected $username;
…
public static function findById($id)
{
$result = self::$dbAdapter->query(
sprintf('SELECT * FROM users WHERE id = %d', $id)
);
if($result) {
return new User($result);
}
}
public function create()
{
try {
return self::$dbAdapter->query(
sprintf(
'INSERT into users …',
$this->username,
…
);
);
} catch …
}
…
}
你会像这样在你的应用程序中使用它:
$john = User::findById(123);
echo $user->username; // John
$jane = new User(array(
'username' => 'Jane'
));
$jane->create();
如果您的行和 AR 不匹配,您肯定不想使用 ActiveRecord。 AR 是表示数据库行的对象。 AR 将对象设计与数据库设计相结合。 AR 不是 ORM。试图把它放进去是不切实际的。如果您发现自己需要更丰富的领域模型,您将不会满意,因为它最终会由于对象关系阻抗不匹配而阻碍您的开发。
补充阅读:
【讨论】: