原则在 flush() 上将有效参数设置为 null



我有两个多对一关系,其中对象$countryFrom$countryToNotification id_country_formid_country_to列中获取值,并在Country表中查找具有相同值的id我有所有属性的设置器和获取器。

实体通知

class Notification
{
/**
 * @ORMManyToOne(targetEntity="Country")
 * @ORMJoinColumn(name="id_country_from", referencedColumnName="id")
 */
private $countryFrom;
/**
 * @ORMManyToOne(targetEntity="Country")
 * @ORMJoinColumn(name="id_country_to", referencedColumnName="id")
 */
private $countryTo;
/**
 * @var integer
 *
 * @ORMColumn(name="id_country_from", type="integer", nullable=false)
 */
private $idCountryFrom;
/**
 * @var integer
 *
 * @ORMColumn(name="id_country_to", type="integer", nullable=false)
 */
private $idCountryTo;   
}


实体国家/地区

class Country
{
/**
 * @var integer
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="IDENTITY")
 */
private $id;  
}

但是,当我想从控制器在数据库中插入数据时,与id_country_formid_country_to关联的属性设置为 null。


控制器方法

$notif = new Notification;
$notif->setCountryFrom(5); // SET to NULL 
$notif->setCountryTo(6); // SET to NULL       
$notif->setCreatedAt(new DateTime());
$em->persist($notif);
$em->flush();


var_dump($notification) 在持久() 之后

object(AppBundleEntityNotification)[457]
private 'countryFrom' => null
private 'countryTo' => null
private 'idCountryFrom' => int 5 // SET
private 'idCountryTo' => int 6   // SET    
private 'createdAt' => 
  object(DateTime)[448]
     public 'date' => string '2016-06-14 06:32:35.000000' (length=26)
     public 'timezone_type' => int 3
     public 'timezone' => string 'UTC' (length=3)
private 'id' => null

在这里,我们看到 idCurrencyFrom 和 idCurrencyTo 是在 persist() 之后设置的,但下一个错误发生了:

An exception occurred while executing 'INSERT INTO alerts (id_currency_from, id_currency_to, active, created_at) VALUES (?, ?, ?, ?)' with params [null, null, "2016-06-14 06:32:35"]:

在我设置多对一关系之前,代码就已经工作了。

如果不查看您的 setter 方法,我无法假设,但您应该将实体传递给 setter 方法而不是 id。例如;

 $country = $em->getRepository('AppBundle:Country')->find(5);
 $notif->setCountry($country);   

相关内容

  • 没有找到相关文章

最新更新