2017-08-16 63 views
0

我仍然在没有给出任何手册的情况下离开开发者的代码。 我想知道是否有可能对原则说不要将数据保存在2个表中的持久数据中。 2表:学说协会只填写了2个表格中的1个

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

状态=>存储状态(询问,在生产中,拒绝)

规则实体:

/** 
    *@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 
---------- 

问题是,每次我试图挽救一个新的规则,学说试图坚持status_in_rule_id的ID在像STATUS_ID表状态。

我想知道是否有到Telle公司学说仅保存在规则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" 
    -coulour: "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

如果你设置你的'Rule'实体已经存在的'Status'实体,也不会坚持一个全新的状态,它会使用的ID您现有的状态实体。 –

+0

感谢您的回答,我很抱歉,但您是通过设置一个已经存在的状态是什么意思? – ricardo

回答

0

听起来好像有一个Status实体的新实例。你要么要加载的Status实体自己

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

,并将其设置在Rule

$rule->setStatus($status)

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

$entityManager->persist($rule);

+0

我已经这样做了,但它不起作用,我只是在编辑中发布控制器 – ricardo

+0

你的代码看起来是否合适,它仍然在你的'Status'表中插入一个新行?我可能会确保'$ status'包含一个值。您可以通过添加'dump($ status)'开始,并检查浏览器底部的开发人员栏。同样,'tail -f'查询日志,看看你能否在那里找到任何东西。 – tlorens

+0

感谢您的帮助,我将转储消息添加到编辑中。它找到了良好的状态,并试图将其保存在状态表 – ricardo