我仍然没有提供任何手册,而是在开发人员背后留下代码。 我想知道是否可以说教条不要在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
}
}
答案 0 :(得分:0)
听起来好像是Status
实体的新实例。您要么自己加载Status
实体
$status = $entityManager->getRepository(Status::class)->find($id);
并将其设置为Rule
$rule->setStatus($status)
或确保您使用与您正在编辑的当前Status
相关联的Rule
。请记住,您正在使用对象而不是值。因此$rule->setStatus(1);
无效。还要检查以确保您
$entityManager->persist($rule);