Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony OneToMany关系如果插入新的子(多)实体,请检查主(一)实体是否存在_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php Symfony OneToMany关系如果插入新的子(多)实体,请检查主(一)实体是否存在

Php Symfony OneToMany关系如果插入新的子(多)实体,请检查主(一)实体是否存在,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,每当保存新的子行时,是否必须手动检查父ID是否确实存在?我本以为symfony/doctrine会自动检查,并会因为OneToMany定义而抛出错误b 例如: 主要实体(“一”): 子实体(“多”): 每当我向数据库插入新的OrderPayment行时,Symfony不应该检查数据库中是否确实存在$orderId,还是需要手动检查?最好将$orderId重命名为$order。教义将关系视为实体对象,而不是整数。是的,如果您保存订单付款,并且订单不存在,则条令将抛出错误 重命名属性、重新生成实体并

每当保存新的子行时,是否必须手动检查父ID是否确实存在?我本以为symfony/doctrine会自动检查,并会因为OneToMany定义而抛出错误b

例如:

主要实体(“一”):

子实体(“多”):


每当我向数据库插入新的OrderPayment行时,Symfony不应该检查数据库中是否确实存在$orderId,还是需要手动检查?

最好将
$orderId
重命名为
$order
。教义将关系视为实体对象,而不是整数。是的,如果您保存
订单付款
,并且
订单
不存在,则条令将抛出错误

重命名属性、重新生成实体并更新db方案时,向orderpayment添加订单,如下所示:

$order = // get order from db
$orderPayment = new OrderPayment();
$orderPayment->setOrder($order);
$em->persist($orderPayment);
$em->flush();

最好将
$orderId
重命名为
$order
。教义将关系视为实体对象,而不是整数。是的,如果您保存
订单付款
,并且
订单
不存在,则条令将抛出错误

重命名属性、重新生成实体并更新db方案时,向orderpayment添加订单,如下所示:

$order = // get order from db
$orderPayment = new OrderPayment();
$orderPayment->setOrder($order);
$em->persist($orderPayment);
$em->flush();

您应该将订单实体本身传递给OrderPayment构造函数,因为没有订单,OrderPayment就不可能存在

//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;

您应该将订单实体本身传递给OrderPayment构造函数,因为没有订单,OrderPayment就不可能存在

//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;

您可以将订单实体本身传递给OrderPayment构造函数。这将确保您不会放弃订单付款。您能在回答中解释一下吗?简单地添加一个传递订单的构造函数对我来说没有任何改变。您可以将订单实体本身传递到OrderPayment构造函数中。这将确保您不会放弃订单付款。您能在回答中解释一下吗?简单地添加一个传递顺序的构造函数对我来说没有任何改变。targetEntity注释不做这项工作吗?目前,让我保存每个条目,即使
顺序
不存在。这没有错,因为注释会像您所说的那样小心。这是一种命名约定。让我问你,如何将订单添加到订单付款中?您应该这样做:
$orderPayment->setOrder($order)因为您添加了实体对象,所以它必须存在。当然,您可以在不添加订单的情况下保存订单付款。然后,表中的Order将为null所有数据(包括Order ID)都来自表单字段。所以它很简单:
if($editForm->isSubmitted()&&&$editForm->isValid()){$this->getdoctor()->getManager()->flush()
但是,如何用不存在的ID来填充订单的表单字段?这是一个手动输入字段。用户手动查找银行帐户上的付款,然后输入订单ID、值、日期等,因此可能输入错误。至少应该检查订单ID是否存在,然后比较值(这是另一个话题)。targetEntity批注不起作用吗?目前,我可以保存每个条目,即使
Order
不存在。这并没有错,因为批注会按照您所说的进行处理。这是一种命名约定。我来问您,如何将订单添加到OrderPayment?您应该这样做:
$OrderPayment->setOrder($Order)
因为您添加了实体对象,所以它必须存在。当然,您可以在不添加订单的情况下保存OrderPayment。然后,订单在表中将为空。包括订单ID在内的所有数据都来自表单字段。因此,它只是:
if($editForm->isSubmitted()&&&$editForm->isValid()){$this->getDoctrine()->getManager()->flush()
但是,如何用不存在的ID来填充订单的表单字段?这是一个手动输入字段。用户手动查找银行帐户上的付款,然后输入订单ID、值、日期等,因此可能输入错误。至少应该检查订单ID是否存在,然后比较值(这是另一个话题)。