Php 是否存在与PDO::FETCH_类相反的情况,或者是否将对象映射回数据库
有了PDO,我们现在可以轻松地将场以极快的速度映射到对象的属性。这:Php 是否存在与PDO::FETCH_类相反的情况,或者是否将对象映射回数据库,php,mysql,oop,pdo,Php,Mysql,Oop,Pdo,有了PDO,我们现在可以轻松地将场以极快的速度映射到对象的属性。这: class myClass {} $stmt = $db->prepare('SELECT foo,bar FROM table WHERE id=28'); $stmt->setFecthMode(PDO::FETCH_CLASS,'myClass'); $object = $stmt->fetch(); $object现在是myClass类的对象,其属性为foo和bar。干净利落 现在,如果我能用PD
class myClass
{}
$stmt = $db->prepare('SELECT foo,bar FROM table WHERE id=28');
$stmt->setFecthMode(PDO::FETCH_CLASS,'myClass');
$object = $stmt->fetch();
$object
现在是myClass类的对象,其属性为foo和bar。干净利落
现在,如果我能用PDO、php甚至MySQL的内置函数将我的对象保存回数据库中,这不是很不可思议吗!大概是这样的:
$stmt = $db->prepare('UPDATE table SET * = ?');
$stmt->setUpdateMode(PDO::UPDATE_CLASS);
$stmt->execute($object);
现在,我为每个实例定义了自定义保存类。虽然速度很快,但维护起来很麻烦,而且很容易出错
当然,对象必须具有与其试图更新的内容完全相同的属性,或者可能具有更少的字段,但不能更多
它存在吗?PDO作为完美ORM的缺失部分所以我最终使用了oop的一个非常突出的特性:析构函数 只要没有对特定对象的其他引用,或者在关闭序列期间以任何顺序调用析构函数方法 从 这是非常甜蜜的,因为我想要的是在我的网站上点击之间保持我的对象的状态。这意味着不同的事情,我不确定它们是否是好的做法,但它容易出错
- 数据库中的字段和对象属性应该相同,以简化析构函数代码并使其更具可移植性
- 我正在使用PDO的
模式构建一个对象(如问题中所述)FETCH_CLASS
function __destruct()
{
$whitelist = array_flip(array('foo','bar'));
// I'm pretty sure not all my properties belong in my table
foreach (get_object_vars($this) as $key => $value)
{
if (!isset($whitelist[$key])) continue;
$fields[] = $key . '=?';
$values[] = $value;
}
$sql = 'UPDATE table SET ' . implode($fields) . 'WHERE id=?';
$values[] = $this->getId();
$stmt = $db->prepare($sql);
$stmt->execute($values);
}
就在那里!下次我从数据库构造对象时,它与上次访问时完全相同。不,我想不是。PDO不是ORM!当然不是:但是你不需要花太多的努力就能拥有它。