2011-06-17 8 views
1

私はこれに対する答えを見つけるためにすばやく検索しましたが、正直なところ、何を検索するのかは100%ではありません。Doctrine Record Objectを動的に作成する - 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

答えて

1

あなたはシンプルを試すことができます。

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

すみません、私は私の答えを投稿する前にあなたのコメントを見たことがなかった... – dxb

+0

@dxdハハ、その罰金。私はあなたが同じ解決策を持ってうれしく思っています。私は何か正しいことをしているように感じます。 – noShowP

+0

@dxd 'new $ table()'を使用しませんでした。 2つの標準的な賢さ? – noShowP

関連する問題