教条协会只填写2个表格中的1个

时间:2017-08-16 15:22:42

标签: php symfony doctrine

我仍然没有提供任何手册,而是在开发人员背后留下代码。 我想知道是否可以说教条不要在2个表中持久保存数据。

2张表:

  • rule =>存储规则的所有元素(名称,端口,服务,源地址,状态等......)

  • status =>存储规则的状态(询问,生产中,被拒绝)

规则实体:

/**
    *@ORM\ManyToOne(targetEntity="status", inversedBy="statuses", cascade={"persist"})
    *@ORM\JoinColumn("name="status_id", referencedColumnName="id", nullable=false)
    */
    private $status

状态实体:

      /**
        *@ORM\OneToMany(targetEntity="rule", mappedBy="status")
         */
        private $statuses

表:

----------                      ---------
 Rule                              Status
----------                       ---------- 
 ID                               ID
 Name                             Name
 Status_Id                        Colour
 SourcePort                      ----------
 DestinationPort
 Protocol
 ----------

问题是每次我尝试保存新规则时,doctrine都会尝试将status_in_rule_id的id保存在表状态中,如status_id。

我想知道是否有办法将学说仅保存在规则tble中的status_id而不试图在状态表中保留任何内容

RuleController:

    $namespace = 'FwBundle';
    $em = $this->getDoctrine()->getManager($this->getUser()->getUserService()->getName());

    $repositoryFw = $em->getRepository($namespace.':Fw');   
    $repositoryStatus = $em->getRepository($namespace.':Status');
    $liste_fws = $repositoryFw->myFindVisible();

    $rule = new rule();
    $form = $this->createForm(RuleType::class, $rule,array('fw'=>$id));

    if ($form->isSubmitted() && $form->isValid()) {
        $fw = $repositoryFw->findOneById($id);
        $status = $repositoryStatus->findOneByShortName('startvalue');
        $rule->setStatus($status);
        $em->persist($rule);
        $em->flush();

转储消息:

status {#1509 ▼
  -id: 1
  -name: "just posted by customer"
  -shortName: "startvalue"
  -colour: "blue"
  -statuses: PersistentCollection {#1511 ▼
    -snapshot: []
    -owner: status {#1509}
    -association: array:15 [ …15]
    -em: EntityManager {#449 …11}
    -backRefFieldName: "status"
    -typeClass: ClassMetadata {#463 …}
    -isDirty: false
    #collection: ArrayCollection {#1512 ▶}
    #initialized: false
  }
}

1 个答案:

答案 0 :(得分:0)

听起来好像是Status实体的新实例。您要么自己加载Status实体

$status = $entityManager->getRepository(Status::class)->find($id);

并将其设置为Rule

$rule->setStatus($status)

或确保您使用与您正在编辑的当前Status相关联的Rule。请记住,您正在使用对象而不是值。因此$rule->setStatus(1);无效。还要检查以确保您

$entityManager->persist($rule);