【问题标题】:Symfony3 "SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'catId' cannot be null "Symfony3 “SQLSTATE [23000]:完整性约束违规:1048 列 'catId' 不能为空”
【发布时间】:2018-05-01 04:28:38
【问题描述】:

我正在尝试在 DataFixtures 类中保存具有 ManyToOne 关系的数据。我在保存数据时收到此错误。

请帮帮我。

来源:

实体/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

<?php
namespace AppBundle\DataFixtures\ORM;


use AppBundle\Entity\DealsCategory;
use AppBundle\Entity\DealsCategoryLang;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

class LoadCategories implements FixtureInterface, ContainerAwareInterface
{

    private $container;
    /**
     * Load data fixtures with the passed EntityManager
     *
     * @param ObjectManager $manager
     */
    public function load(ObjectManager $manager)
    {
        $category = new DealsCategory();
        $categoryLang = new DealsCategoryLang();
        $categoryLang->setLang('en');
        $categoryLang->setTitle('Food and Drinks');
        $category->setOneCategoryLang($categoryLang);

        $manager->persist($category);
        $manager->persist($categoryLang);
        $manager->flush();
    }

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }
}

我尝试了不同的方法,但仍然无法正常工作。请告诉我,我做错了什么?

统一更新: 我的错误是:

[Doctrine\DBAL\Exception\NotNullConstraintViolationException]
使用参数 [null, "en", "Food and Drinks"] 执行 'INSERT INTO deal_category_lang (catId, lang, title) VALUES (?, ?, ?)' 时发生异常:
SQLSTATE [23000]:违反完整性约束:1048 列 'catId' 不能为空

[Doctrine\DBAL\Driver\PDOException]
SQLSTATE [23000]:违反完整性约束:1048 列 'catId' 不能为空

PDO异常]
SQLSTATE [23000]:违反完整性约束:1048 列 'catId' 不能为空

我正在通过命令行运行灯具:

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

【问题讨论】:

  • 您是否遇到任何错误?它在什么方面不起作用?
  • 你得到的错误是不言自明的,你的 catid 是 null
  • 我得到了有关错误的更新信息。

标签: php symfony-3.3


【解决方案1】:

好的,我解决了... 问题出在我的 Fixture 类中:

代替

$category->setOneCategoryLang($categoryLang);

我应该把

$categoryLang->setCategory($category);

,尊重我的实体关系的层次结构:(

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 2019-11-20
    • 2021-08-16
    • 2019-10-06
    • 2020-10-25
    • 2017-02-28
    • 2017-04-15
    • 2017-12-26
    • 2019-11-24
    相关资源
    最近更新 更多