教义对象选择不作为对象保湿

时间:2016-10-16 16:58:35

标签: doctrine-orm zend-framework2

我有一个带有字段集的表单,其中包含一个Doctrine ObjectSelect元素。

$this->add(array(
'name' => 'vatRate',
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'options' => array(
    'label' => _('VAT Rate:'),
    'object_manager' => $this->getEntityManager(),
    'target_class' => 'Application\Entity\VatRates',
    'property' => 'title',
    'is_method' => true,
    'find_method' => array(
        'name' => 'getVatRatesOrderRate',
    ),
    'label_generator' => function($targetEntity) {
        return $targetEntity->getTitle() . ' (' . $targetEntity->getVatRate() . '%)';
    },
    'disable_inarray_validator' => TRUE,
),

));

我的invoiceItems实体中有

/**
 * @var \Application\Entity\VatRates
 *
 * @ORM\ManyToOne(targetEntity="Application\Entity\VatRates")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="vat_rate_id", referencedColumnName="vat_rate_id")
 * })
 */
private $vatRate;

/**
 *
 * @param VatRates|NULL $vatRate
 * @return \Application\Entity\InvoiceItems
 */
public function setVatRate(VatRates $vatRate = NULL)
{
    $this->vatRate = $vatRate;
    return $this;
}

我遇到的问题是,当我验证表单时,Doctrine的DoctrineObject水槽没有将vatRate转换为实体,然后再将其传递给setter。我收到以下错误。

Catchable fatal error: Argument 1 passed to Application\Entity\InvoiceItems::setVatRate() must be an instance of Application\Entity\VatRates, integer given, called in C:\Users\User\OneDrive\Documents\My Webs\freedomsnew\vendor\doctrine\doctrine-module\src\DoctrineModule\Stdlib\Hydrator\DoctrineObject.php on line 282 and defined in C:\Users\User\OneDrive\Documents\My Webs\freedomsnew\module\Application\src\Application\Entity\InvoiceItems.php on line 339

正如错误消息所示,整数vatRateId被发送到invoiceItems实体setVatRate方法。

我有其他形式/字段集以类似的方式设置,所有工作都没有问题。有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是Doctrine缓存了实体。清除缓存解决了这个问题。

public class Family
{
    String surname;
    Person husband;
    Person wife;
    Person child

public void setHusband(String firstname, String middlename, boolean isMale, int age){
    //Initialize the husband class
    this.husband = new Person(firstname, middlename, isMale, age);
}

 public void setWife(String firstname, String middlename, boolean isMale, int age){
    //Initialize the wife person class
    this.wife = new Person(firstname, middlename, isMale, age);
}

public void haveChild(String firstName, String middleName, boolean isMale)
{
    System.out.println(firstName.trim().toUpperCase() + " is born."); //Prints Child's name
    this.child = new Person(firstname, middlename, isMale, age);
}
}

我从现在开始设置批处理文件。