2017-11-17 9 views
0

私はManyToOneリレーションを持つデータをDataFixturesクラスに保存しようとしています。データを保存する際にこのエラーが発生します。Symfony3 "SQLSTATE [23000]:整合性制約違反:1048カラム 'catId'をnullにすることはできません。

お願いします。

出典:

エンティティ/ DealsCategory.php:

<?php 

namespace AppBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* DealsCategory 
* 
* @ORM\Table(name="deals_category") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\DealsCategoryRepository") 
*/ 
class DealsCategory 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="alias", type="string", length=50, nullable=true) 
    */ 
    private $alias; 

    /** 
    * @ORM\OneToMany(targetEntity="DealsCategoryLang", mappedBy="category") 
    */ 
    protected $categoryLang; 

    /** 
    * @return mixed 
    */ 
    public function getCategoryLang() 
    { 
     return $this->categoryLang; 
    } 

    /** 
    * @param DealsCategoryLang $categoryLang 
    */ 
    public function setCategoryLang(DealsCategoryLang $categoryLang = null) 
    { 
     $this->categoryLang = $categoryLang; 
    } 

    /** 
    * @param DealsCategoryLang $categoryLang 
    */ 
    public function setOneCategoryLang(DealsCategoryLang $categoryLang) 
    { 
     $this->categoryLang[] = $categoryLang; 
    } 

    /** 
    * DealsCategory constructor. 
    */ 
    public function __construct() 
    { 
     $this->categoryLang = new ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set alias 
    * 
    * @param string $alias 
    * 
    * @return DealsCategory 
    */ 
    public function setAlias($alias) 
    { 
     $this->alias = $alias; 

     return $this; 
    } 

    /** 
    * Get alias 
    * 
    * @return string 
    */ 
    public function getAlias() 
    { 
     return $this->alias; 
    } 
} 

エンティティ/ DealsCategoryLang.php:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* DealsCategoryLang 
* 
* @ORM\Table(name="deals_category_lang") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\DealsCategoryLangRepository") 
*/ 
class DealsCategoryLang 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="catId", type="integer") 
    */ 
    private $catId; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="lang", type="string", length=10) 
    */ 
    private $lang; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="title", type="string", length=70) 
    */ 
    private $title; 

    /** 
    * @ORM\ManyToOne(targetEntity="DealsCategory", inversedBy="categoryLang", cascade={"persist"}) 
    * @ORM\JoinColumn(name="catId", referencedColumnName="id") 
    * 
    */ 
    protected $category; 

    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set catId 
    * 
    * @param integer $catId 
    * 
    * @return DealsCategoryLang 
    */ 
// public function setCatId($catId) 
// { 
//  $this->catId = $catId; 
// 
//  return $this; 
// } 

    /** 
    * Get catId 
    * 
    * @return int 
    */ 
    public function getCatId() 
    { 
     return $this->catId; 
    } 

    /** 
    * Set lang 
    * 
    * @param string $lang 
    * 
    * @return DealsCategoryLang 
    */ 
    public function setLang($lang) 
    { 
     $this->lang = $lang; 

     return $this; 
    } 

    /** 
    * Get lang 
    * 
    * @return string 
    */ 
    public function getLang() 
    { 
     return $this->lang; 
    } 

    /** 
    * Set title 
    * 
    * @param string $title 
    * 
    * @return DealsCategoryLang 
    */ 
    public function setTitle($title) 
    { 
     $this->title = $title; 

     return $this; 
    } 

    /** 
    * Get title 
    * 
    * @return string 
    */ 
    public function getTitle() 
    { 
     return $this->title; 
    } 
} 

DataFixtures/ORM/LoadCategories.php

私はさまざまな方法で試しましたが、まだ動作していません。私に教えてください、私は間違って何をしていますか?

UPD: 私のエラーは、次のとおりです。

[教義\ DBAL \例外の\ NotNullConstraintViolationException]
(deals_category_lang(CATID、LANG、タイトル)VALUES。INSERT INTO」を実行中に例外が発生しました、? ?、?)」のparams [ヌル、 "EN"、 "食品・飲料"]と:
SQLSTATE [23000]:整合性制約違反:1048列 'CATID' は

[教義\ DBAL \ドライバーnullにすることはできません\ P DOException]
SQLSTATE [23000]:整合性制約違反:1048列 'CATIDは' にすることはできませんヌル

PDOException]
SQLSTATE [23000]:整合性制約違反:1048列 'CATIDは' にすることはできませんヌル

私はコマンドラインから備品を実行しています:

php bin/console doctrine:fixtures:load --append 
+0

あなたはすべてのエラーを取得していますか?どのように動作しませんか? – Phil

+0

あなたが得るエラーは自明ですが、あなたのcatidはnullです –

+0

エラーに関する情報が更新されました。 – montie

答えて

0

を[OK]を、私はこの問題は、私のフィクスチャクラスにいた ...それを解決:

代わりの

$category->setOneCategoryLang($categoryLang); 

私は私のエンティティの関係の階層を尊重し、

$categoryLang->setCategory($category); 

を置く必要があります:(

関連する問題