2016-05-22 6 views
3

私は非常に困惑しているような問題によって盗まれています。参考までに - 私は知っており、ここでは教義の質問の大部分を読んでいるので、私は教義の基礎と関係を特定しています。Doctrineは1対多の関係を保存しません

以下

だから1 Sampleが複数Analysisを持つことができますどのように私のデータモデルのルックス(コードの関連セクションを掲示)

class Sample 
{ 

    /** 
    * @ORM\OneToMany(targetEntity="Analysis", mappedBy="sample", cascade={"persist"}) 
    * 
    protected $analyses 

    public function addAnalysis(Analysis $analysis) 
    { 
     $analyses->setSample($this); 
     $this->analyses[] = $analyses; 
    } 
} 

と分析

class Analysis 
{ 

    /** 
    * @ORM\ManyToOne(targetEntity="Sample", inverseBy="analyses", cascade={"persist"}) 
    * @ORM\JoinColumn(name="sample_id", referencedColumnName="id") 
    * 
    protected $sample 

    public function setSample(Sample $sample) 
    { 
     $this->sample = $sample; 
    } 
} 

です。しかし、新しいAnalysisを作成している間に、私はそれを作成させません。 NOT NULL制約の例外がスローされています。

以下は、私が試したコードです。

$analysis = new Analysis 
$analysis->setUUID("seeebbbfg"); 
$analysis->setStatus(Analysis::STATUS_DONE); 
$sample = $sample->addAnalysis($analysis) 
$em->persist($sample); 
$em->flush(); 

I多くのリンクや教義のドキュメントを通じて

Doctrine One-To-Many Relationship Won't Save - Integrity Constraint Violation を行っている多くの関係-文句を言わない - 保存 - 整合性制約違反 Symfony 2 doctrine persist doesn't work after updating Relationship Mapping Doctrine entities relationship

このDoctrine "A new entity was found through the relationship" errorを通過した後、私はサンプルを永続化する前に$analysisを残そうとしましたが、 '新しいエンティティが見つかりました'というエラーが表示され、この公式のドクトリンのドキュメント http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/association-mapping.html

わからないことがわかりました。誰もこれにどのような光を当てることができますか?

UPDATE 1

[Doctrine\DBAL\Exception\NotNullConstraintViolationException] 

An exception occurred while executing 

INSERT INTO analysis (id, uuid, type, status, submission_at, sample_id) VALUES (?,?,?,?,?,?) with params [202066, "seeebbbfg", "temp", 2, "2016-5-22 12:16:39", null] 
null value in column "sample_id" violates not-null constraint 
+0

は、あなたが完全なNOTNULL例外メッセージを提供することができ、結果を教えてください? –

+0

@dragoste:そこに行きます。 – verisimilitude

答えて

4

私はあなたがセットSampleAnalysesコレクションにanalysisを追加すべきだと思います。

$ this-> analyzeはArrayCollectionだと思いますので、ArrayCollection::add()メソッドを使用して新しいオブジェクトを追加してください。

、コードのこの部分を試してみて、私は

class Sample 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Analysis", mappedBy="sample", cascade={"persist"}) 
    */ 
    protected $analyses 

    public function __construct() 
    { 
     $this->analysis = new ArrayCollection(); 
    } 


    public function addAnalysis(Analysis $analysis) 
    { 
     $this->analyses->add($analyses); 
     $analyses->setSample($this); 

     return $this; 
    } 
} 
+0

素晴らしい、これは働いた。私は教義のリレーショナル・セマンティクスを全く理解していなかったと思う – verisimilitude

関連する問題