2017-07-06 97 views
1

我試圖堅持一個TradeEntity。 TradeEntity與CurrencyEntity具有OneToOne關係。學說2 - 堅持與外國實體對接的表的外鍵的實體

/** 
    * @ORM\OneToOne(targetEntity="Repositories\Currency\CurrencyEntity") 
    * @ORM\JoinColumn(name="currency", referencedColumnName="id") 
    * 
    * @var CurrencyEntity 
    */ 
    protected $currency; 

我收到從另一個對象,我想在這個新TradeEntity插入並堅持到數據庫,但得到一個異常的CurrencyEntity:

Type: Doctrine\ORM\ORMInvalidArgumentException 
Message: Expected value of type "Repositories\Currency\CurrencyEntity" 
for association field "Repositories\Trade\TradeEntity#$currency", got "integer" instead. 

是否已經沒有其他辦法我堅持TradeEntity而不從數據庫中提取CurrencyEntity並設置它?

回答

1

鑑於我最近的發現,我覺得有必要更新這個答案。

閱讀about Doctrine's advanced configuration,我碰到Reference Proxies

方法EntityManager#getReference($entityName, $identifier)允許您獲取對已知標識符的實體的引用,而不從數據庫加載該實體。

例如,當您希望與具有標識符的實體建立關聯時,此功能非常有用。你可以簡單地這樣做:

<?php 
// $em instanceof EntityManager, $cart instanceof MyProject\Model\Cart 
// $itemId comes from somewhere, probably a request parameter 
$item = $em->getReference('MyProject\Model\Item', $itemId); 
$cart->addItem($item); 

老答案:

什麼你可以做的是(這違背了一個ORM的目的,但它可能):

$conn = $entityManager->getConnection(); 
$conn->insert(
    'table_name', 
    array(
     'column_name' => 'column_value', 
     // define all the columns here 
    ) 
); 

查看學說的Data Retrieval And Manipulation

+1

我喜歡更新的答案。按要求工作。謝謝! – Jordan