【问题标题】:Get table name in doctrine join query在教义连接查询中获取表名
【发布时间】:2013-07-17 00:48:17
【问题描述】:

我正在使用带有 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)。如何知道每个字段来自哪个表?

【问题讨论】:

    标签: php doctrine symfony-1.4


    【解决方案1】:

    通常情况下,记录将作为适当的模型类进行水合,因此您不会有一个平坦的结果集。然后,您可以使用访问器/数组表示法/对象表示法从记录中访问属性。

    例子:

    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 进行适当的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      相关资源
      最近更新 更多