2011-06-17 86 views
1

我已經有了一個快速搜索來找到這個答案,但老實說,我甚至沒有100%的搜索。動態創建Doctrine記錄對象 - Symfony 1.4

這是一個比實際問題更多的優化問題,但我可以做的幫助。

在我的Symfony 1.4項目中,我創建了一些方法,以「獲取或創建對象」,例如:

protected function getOrCreateManufacturer($name) 
{ 
    $manufacturer = ManufacturerTable::getInstance()->findOneBy('name', $name); 

    if(!$manufacturer) 
    { 
     $manufacturer = new Manufacturer(); 
     $manufacturer->setName($name); 
    } 

    return $manufacturer; 
} 

我有幾個的,這些不同的對象所有的做同樣的事情。我想創建一個可以代替很多代碼的這些方法中的方法,使他們都可以調用它像這樣:

protected function getOrCreateManufacturer($name) 
{ 
    return $this->getOrCreateObject('Manufacturer', 'name', $name); 
} 

protected function getOrCreateObject($table, $field, $value) 
{ 
    $object = Doctrine::getTable($table)->findOneBy($field, $value); 

    if(!$object) 
    { 
     // create object here 
     $object->set($field, $value); 
    } 

    return $object; 

} 

但我似乎無法找出我怎麼能創建一個實例我的對象。

我試圖創建的對象全部擴展爲sfDoctrineRecord

如果我不能這樣做,那很好,但它可能會很酷。

乾杯。

+0

47分鐘後,我想通了。 你可以在參數`$ table`上調用`new`並創建該對象。魔法。 – noShowP 2011-06-17 10:51:57

回答

1

您可以嘗試簡單:

if(!$object) 
{ 
    $object = new $table(); 
    $object->set($field, $value); 
} 
+0

對不起,我沒有看到您的評論之前發佈我的答案... – dxb 2011-06-17 15:37:09