使用具有多态类的PDO FETCH_CLASS

时间:2012-05-19 21:11:58

标签: mysql class pdo polymorphism

我有一个像php这样的php类:

class bar{
    public $value;
}

class foo extends bar{
    public $value;
    public $name;
}

在数据库中:

-bar table:
value
-----
'bar value 1'
'bar value 2'

-foo table:
value        |  name
-------------+--------------
'foo value 1'| 'foo name 1'
'foo value 2'| 'foo name 2'

如何使用PDO FETCH_CLASS存储和获取它们?

2 个答案:

答案 0 :(得分:1)

这似乎不需要特殊处理。只要您知道自己是在申请foo还是bar,就可以将其作为字符串传递给fetch调用。由于您有foobar的不同表格,我假设您已确定何时查询您需要的表格。

// Build a foo
$stmt->setFetchMode(PDO::FETCH_CLASS, 'foo');
$stmt->fetch()

// Or build a bar
$stmt->setFetchMode(PDO::FETCH_CLASS, 'bar');
$stmt->fetch()

答案 1 :(得分:0)

潜在的凉爽

select 'foo', name, value from footable;

PDO::FETCH_CLASSTYPE使用结果中的第一列来确定要为该行实例化的类名。

$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE);