Symfony Onetomany关系检查是否插入新孩子(许多)实体,是否存在主要(一个)实体



每当我保存新的子行时,我是否必须检查父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;

相关内容

最新更新