[英]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..
)
因此,您可以通過嵌套數組的鍵確定屬性來自哪個模型/表。
這就是說,如果您正確執行操作,則表名應該不重要,而應該關注它是什么類型的對象。 表名可以更改,並且僅僅是存儲結構,您可能不希望您在此級別上關注邏輯。
為此,您可以使用instanceof
和get_class
進行適當操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.