2017-08-16 8 views
0

私はまだ開発者の背後にあるコードを何も手渡さずに残しています。 私は、2つのテーブルの永続データにデータを保持しないようdoctrineに言えるかどうかを知りたいと思っています。 2表:寄せられるルールのdoctrine associationちょうど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_IDようなテーブルの状態でstatus_in_rule_idのIDを保持しようとするということです。

私は唯一のステータステーブルに何かを持続しようとせずに、ルールTBLEでSTATUS_IDを保存するために教義をtelleする方法があるかどうかを知りたいのですが

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

していることを確認するためにチェックし、それがのIDを使用します既存のステータスエンティティ。 –

+0

お返事ありがとうございます、申し訳ありませんが、既に存在するステータスを設定するとどういう意味ですか? – ricardo

答えて

0

Statusエンティティの新しいインスタンスがあるようです。あなた自身

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

Statusエンティティをロードし、Rule

$rule->setStatus($status)

またはあなたが「現在のRuleに関連付けられているStatusを使用していることを確認し、それを設定したいと思うどちらか再編集。覚えておいてください、あなたは値ではなくオブジェクトで作業しています。したがって$rule->setStatus(1);は無効です。また、あなたがあなたの `Rule`エンティティに既存の` Status`エンティティを設定した場合、それはブランドの新しいステータスを保持されません

$entityManager->persist($rule);

+0

私はすでにそれを行っていますが、動作しませんでした。私はちょうど編集のコントローラを投稿します。 – ricardo

+0

あなたのコードは正しいように見えますが、まだ 'Status'テーブルに新しい行が挿入されていますか?おそらく '$ status'に値が含まれていることを確認したいと思います。あなたは 'dump($ status)'を追加して、ブラウザの一番下にある開発者バーを確認することから始めることができます。また、クエリのログを 'tail -f'して、そこに何かがあるかどうかを確認してください。 – tlorens

+0

あなたの助けていただきありがとうございます、私は編集にダンプメッセージを追加しました。良いステータスを見つけ、それをステータステーブル – ricardo

関連する問題