簡體   English   中英

在學說聯接查詢中獲取表名

[英]Get table name in doctrine join query

我將Symfony 1.4與Doctrine一起使用,並且遇到這種情況:

我有一個表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)。 我怎么知道每個字段來自哪個表?

正常情況下,記錄會作為適當的模型類被合並,因此您不會獲得平坦的結果集。 然后,您可以使用訪問器/數組符號/對象符號從記錄中訪問屬性。

例:

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..
)

因此,您可以通過嵌套數組的鍵確定屬性來自哪個模型/表。

這就是說,如果您正確執行操作,則表名應該不重要,而應該關注它是什么類型的對象。 表名可以更改,並且僅僅是存儲結構,您可能不希望您在此級別上關注邏輯。

為此,您可以使用instanceofget_class進行適當操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM