2011-06-22 53 views
12

我認爲標題會問這一切。很簡單,我有一個實體:Doctrine2可以從數組中提供一個新實體嗎?

class User { 
    private $id; 
    private $name; 
    private $username; 
} 

與所有適當的setter和getter。我有一個數組:

array('name' => 'joe', 'username' => 'shmoe'); 

,我希望能夠做這樣的事情:

Some\Unknown\Doctrine\Object::hydrateFromArray($array); 

顯然,創建一個函數來滋潤它的對象將是很容易,但肯定主義必須有內置的東西來實現這一目標?

回答

17

想通了。 給定資料庫:

//for odm 
$repo->getDocumentManager()->getHydratorFactory()->hydrate($entity, $array); 

我不知道是否同樣可以爲ORM做,但我目前使用ODM。

+4

看起來像它的MongoDB? – nvvetal

+0

這僅適用於Doctrine \ ODM \ MongoDB \ Hydrator \ HydratorInterface。不適用於所有數據庫類型。 –

3

與實體一樣,您需要創建setters和getters。

class User 
{ 
    private $id; 
    private $name; 
    private $username; 

    public function fromArray($array) 
    { 
     // Code to fill the object here. 
    } 
} 

也沒有什麼說你不能在構造函數中實現它。請記住,Doctrine 2實體不會從主類繼承任何東西,除非您自己做。它只是作用於它。

+1

,如果你在你的實體的關係是什麼?你如何在你的實體中注入EM? (爲了獲得相關的對象/對象,你將需要EM) – thexpand

3

您可以使用串行組件:

$user = $serializer->deserialize($data, 'Namespace\User', 'json'); 

http://symfony.com/doc/current/components/serializer.html#deserializing-an-object

+0

symfony序列化組件不支持json的反序列化。但是,JMS序列化器的確如此。 –

+0

是什麼讓你認爲Symfony序列化程序組件不支持json?我一直在使用它反序列化json,並且總是推薦使用symfony序列化程序組件對jms進行部分放棄。 Symfony序列化程序的靈活性如下:http://thomas.jarrand.fr/blog/serialization/ – HKandulla

相關問題