2017-07-06 99 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