每当我保存新的子行时,我是否必须检查父id是否实际存在?我以为Symfony/Doctrine会自动检查,并且会引发错误b ec. onetomany definity 。
示例:
主实体("一个"):
class Order
{
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORMOneToMany(targetEntity="OrderPayment", mappedBy="orderId")
*/
private $orderPayments;
public function __construct()
{
$this->orderPayments = new ArrayCollection();
}
}
儿童实体("许多"):
class OrderPayment
{
/**
* @ORMManyToOne(targetEntity="Order", inversedBy="orderPayments")
* @ORMJoinColumn(name="order_id", referencedColumnName="id")
*/
private $orderId;
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $id;
}
每当我将新的订单付款行插入数据库时,Symfony是否应该检查$ orderID是否实际上存在于数据库中,或者我需要手动检查?
最好将$orderId
重命名为$order
。学说将关系视为实体对象,而不是整数。是的,如果您保存OrderPayment
并且不存在Order
,那么学说将丢失错误!
当您重命名属性,再生实体并更新数据库方案时,将订单添加到这样的订单:
:$order = // get order from db
$orderPayment = new OrderPayment();
$orderPayment->setOrder($order);
$em->persist($orderPayment);
$em->flush();
您应该将订单实体本身传递到订单付费构造器中,因为没有订单就不可能存在订单。
//OrderPayment
public function __construct(Order $order)
{
$this->order = $order
$this-createdAt = DateTime::now();
}
//Controller or Service
$order = $orderRepository->getOrderBySomeField($field);
if ( ! $order){
throw new HttpNotFoundException();
}
$orderPayment = new OrderPayment ($order);
$em->persist($orderPayment);
$em->flush;