2017-08-16 64 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