我正在使用带有Doctrine的Symfony 1.4,并且遇到这种情况:
我有一个表A,它包含公共字段,还有3个表B,C和D,它们都有一个A(a_id)的外键,以及特定于每个字段的额外字段。
在我的模型中,我正在编写以下查询:
public function getAllFields(){
$query = Doctrine_Core::getTable('A')
->createQuery('a')
->leftJoin('a.B b')
->leftJoin('a.C c')
->leftJoin('a.D d');
$result = $query->execute();
return $result;
拥有该数据(DoctrineCollection),我需要在视图中迭代它以填充网格。问题是我需要在该列表中指定记录的类型(即它是否属于表B,C或D)。我怎么知道每个字段来自哪个表?
答案 0 :(得分:2)
通常情况下,记录会被水合为适当的模型类,因此您不会有平坦的结果集。然后,您可以使用访问者/数组表示法/对象表示法从记录中访问属性。
示例:
foreach($result as $record) {
echo $a->getSomeAProperty();
$b = $a->getB();
echo $b->someBProperty();
$c = $a->getC();
echo $c->getSomeCProperty();
}
要从模型中获取表名,您可以执行以下操作:
$theModel->getTable()->getTableName();
同样,如果你使用标准数组水合,你将得到一个嵌套的数组结构,如:
array(
'some_a_property' => 'value',
'C' = > array(
'some_c_property' => 'value'
)
// etc..
)
因此,您可以通过嵌套数组的键确定属性来自哪个模型/表。
那说如果你正确地做事情,表名应该不重要,相反你应该关心它是什么类型的对象。表名可以更改,并且只是一个存储构造,您可能不希望在此级别关注逻辑。
为此,您可以instanceof
和get_class
采取相应的行动。