我有两个多对一关系,其中对象$countryFrom
和$countryTo
从Notification
id_country_form
和id_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_form
和id_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);