我想也许我的问题已经在 stackoverflow 的其他地方得到了部分解答,但我觉得通过一起提问可能会得到更全面的答案。对于我可能输入的任何愚蠢内容,我深表歉意——我在 PHP 中的工作还不够,所以当我这样做时,我觉得我正在重新学习它。
无论如何,假设我有一个名为“items”的 mysql 数据库表,其中包含以下列:item_id
, item_type
, item_name
。我有一个看起来像这样的 PHP 类:
class Item
{
public $item_id;
public $item_type;
public $item_name;
}
换句话说,我真的只是想要一个从数据库到类对象的直接映射。
我决定在类中包含一个名为“load”的方法,该方法在提供item_id
. 所以这是我的两个问题:
- 在课堂上连接数据库的最佳方式是什么?我应该在类中实例化一个新的 PDO 对象,还是应该将 PDO 数据库句柄作为加载方法的参数传递?有关系吗?
作为分配类属性的一种方式,这是否有意义,或者是否有更聪明的方法来做到这一点:
$sth = $dbh->query("SELECT * FROM items WHERE item_id = $item_id"); $sth->setFetchMode(PDO::FETCH_CLASS, 'Item'); while ($obj = $sth->fetch()) { foreach ($obj as $key => $value) { $this->$key = $value; } }
编辑: 在看到这些回复后我意识到(可以肯定的是,这很有趣),我可能没有详细说明。
我认为使用 ORM 库对于我正在做的事情可能有点矫枉过正(只是一个个人爱好项目——而不是对雇主而言),但实际上,我不确定这是否是我所需要的。这就是为什么。因为我可能有这样的事情:
class InventoryItem extends Item
{
public $user_id;
public $quantity;
}
我还没有真正考虑清楚。只是举个例子。所以我用来获取数据的查询可能看起来像这样:
SELECT *
FROM items, inventories
WHERE item.item_id = inventories.item_id
AND user_id = $user_id;
换句话说,我必须创建能够正确提取类数据的 SQL 语句,而且我真的只需要知道我应该传入我的数据库句柄还是在 load 方法中创建它,以及是否上面的代码作为分配属性值的好方法是有意义的。
另一个问题是我可能不得不处理一些数据(例如,如果其中一列正在存储一个 json 编码的数组或其他东西)。