我有一個Symfony2實體,它具有給定類類型的非標量屬性。該屬性可以安全地轉換爲字符串,這就是它在數據庫中的持久性。從數據庫檢索後確保Symfony2實體屬性類型正確
當從數據庫中檢索到該實體的實例時,該屬性的getter將返回一個字符串,而不是預期類的對象。
這裏是一個通用的例子實體:
<?php
namespace Acme\ExampleBundle\Entity;
class ExampleEntity
{
/**
* @var \example\ComplexObject
* @\Doctrine\ORM\Mapping\Column(type="string")
*/
protected $property;
/**
* @param \example\ComplexObject $property
* @return \ExampleEntity
*/
public function setProperty(\example\ComplexObject $property) {
$this->property = $property;
return $this;
}
/**
* @return \example\ComplexObject
*/
public function getProperty() {
return $this->property;
}
}
需要明確的是,從數據庫檢索後這個實體的實例調用getProperty()
返回一個字符串,而不是\example\ComplexObject
一個實例。
我明白,Symfony和/或Doctrine不知道如何將直接從數據庫中檢索到的字符串值轉換爲所需的對象。
在代碼期望對象是給定類型而不是字符串的情況下,我可以執行字符串來進行對象轉換,但是如果這種情況可能會在從此類型實體中檢索到時自動發生數據庫。
我有這個實體的自定義實體存儲庫,並試圖覆蓋find()
方法,但這似乎並沒有被調用。
我可以修改getProperty()
方法以將字符串轉換爲正確的對象類型,但這看起來不雅觀,並且實體和相關字符串與對象翻譯器過於緊密相關。
在Symfony2項目的上下文中,當從數據庫中檢索時,確保給定實體的屬性設置爲正確類型的當前最優雅的最佳實踐方法是什麼?
也許它與教條的延遲加載有關 – skler
對象是一個實體還是另一個類? – Flosculus
@Flosculus一共是另一類 –