2016-08-03 3 views
0

私はlaravelでdoctrineを使用しています。別のエンティティ(Product)にプロパティを作成するマップされたクラス(Item)がありますが、 Item内にはidを持つプロパティがありますが、 'NOT NULL'データベースエラーが発生します。Doctrineはセットアソシエーションなしで継承します

製品:

/** 
* Product 
* 
* @ORM\Table(name="PRODUCT") 
* @ORM\Entity 
*/ 
class Product 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="CD_PRODUCT", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $cdProduct; 
} 

項目私のコントローラで

/** 
* Item 
* 
* @ORM\Table(name="ITEM") 
* @ORM\Entity 
*/ 
class Item 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="CD_PRODUCT", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $cdProduct; 
    /** 
    * @var DcB2bMercadoria 
    * 
    * @ORM\ManyToOne(targetEntity="App\Models\Product") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="CD_PRODUCT", referencedColumnName="CD_PRODUCT") 
    * }) 
    */ 
    private $product; 

    public function __construct($cdProduct) 
    { 
     $this->cdProduct = $cdProduct; 
    } 
} 

私はこれを行う:

$item = new Item(1); 
$em->persist($item); 
$em->flush(); 

は、しかし、これはNULLエラーが発生しません。

あなたは私を助けることができますか?

Tks!

PS:私はクラスをシミュレートします

答えて

0

どのようにsqlスキーマを生成しましたか?

doctrine:schema:createを使用する場合は、その列にnot nullを指定しないでsqlを出力する必要があります。

+0

私のdbはdbaによって管理されており、nullを持つフィールドを許可しないため、できません。とにかく、cdProductの値は設定されていましたが、DQLからSQLへの変換にはnull値があります。見てください: https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php#L671 私はこれを行います(もしわかっていればわかりませんが、私の問題を解決してください): 'if($ newValId){ $ result [$ owningTable] [$ sourceColumn] = $ newValId ? $ newValId [$ targetClass-> getFieldForColumn($ targetColumn)] :null; } ' –

関連する問題