如何在 PHP 中使用 ORM
Posted
技术标签:
【中文标题】如何在 PHP 中使用 ORM【英文标题】:HOW to use ORM with PHP 【发布时间】:2012-08-23 07:28:12 【问题描述】:我已经看到十几个主题和问题都在声明在 php 中使用 ORM(30 php best practices for beginners 和 Why use an orm in php)
所以我想知道,如何在 PHP 中使用 ORM。特别是OOPHP。
假设我们有一个类 User 并且我们正在注册一个。 (我正在使用 RedBean)
<?php
class User
private $username;
private $password;
public function registerUser($username, $password)
require $root . "classes/Helper.php";
$helper = new Helper();
$salt = sha1($helper->generateSalt());
$this->username = $username;
$this->password = sha1($password + $salt);
$this->salt = $salt;
$this->store();
private function store()
$user = R::dispense(__CLASS__);
$user->username = $this->username;
$user->password = $this->password;
?>
这行得通。每次用户注册时,我都会存储它。
或者将store()
函数放在__construct()
中会更好吗?
还是有更好的方法来做到这一点?
使用__CLASS__
有用还是我应该更好地使用'User'
?
private function load($username)
$user = R::find(__CLASS__, 'username=?', array($username));
$this->username = $user->username;
$this->password = $user->password;
$this->salt = $user->salt;
$this->email = $user->email;
现在,如果我想加载一个用户,我可以在我的页面中创建一个新的用户对象并调用load()
来填充所需的用户。
或者我应该直接使用$userbean = R::find('User', 'username=?', array($username));
并将其放在$user = new User();
中?
我对可以完成几件事的方式感到有些困惑。这实际上是与面向对象的 PHP 一起使用的吗?
[edit:] 那么,我使用 RedBean 和 OOPHP 的方法是这样吗?
【问题讨论】:
【参考方案1】:这取决于您的 ORM,一般来说,您有一个关于开始使用 ORM 的常见问题解答。 对于 DOCTRINE 2 ORM,您可以阅读this page,对于 PROPEL ORM,您可以阅读 this page,对于 redbean,您可以阅读 that。
对不起,我不知道redbean,但是,对于其他ORM,它可能很有用(我使用Doctrine2),我们可以在那里与OOPHP一起使用。开始安装ORM后,当我们“调用”你数据库中链接的ORM时接收Object,更方便执行SQL请求并对每个请求进行处理...
对于用户不能像 SQL 或数据库一样,因为 ORM 负责优化请求,所以更方便...
【讨论】:
是的,但这不是我的意思。这更像是我不知道放置数据库连接的良好结构。所以关于这个问题:我应该将用户的“加载”部分和用户对象的序列化放在哪里?以上是关于如何在 PHP 中使用 ORM的主要内容,如果未能解决你的问题,请参考以下文章