Symfony 原则2链接表关系-完整性约束冲突

Symfony 原则2链接表关系-完整性约束冲突,symfony,doctrine-orm,zend-framework2,Symfony,Doctrine Orm,Zend Framework2,我有一个场景,我将链接以下表格: 组织机构 雇员 组织员工 因此,我以以下方式将随行人员联系起来 Employee-OneToMany-OrgEmployee(链接表)-多通 但我得到了以下错误: An exception occurred while executing 'INSERT INTO org_branch_employees (is_active, created_at, created_by, modified_at, modified_by, employee_id, org_

我有一个场景,我将链接以下表格:

组织机构 雇员 组织员工

因此,我以以下方式将随行人员联系起来

Employee-OneToMany-OrgEmployee(链接表)-多通

但我得到了以下错误:

An exception occurred while executing 'INSERT INTO org_branch_employees (is_active, created_at, created_by, modified_at, modified_by, employee_id, org_branch_id) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [\"1\", \"2016-02-04 20:03:22\", 1, \"2016-02-04 20:03:22\", 1, null, null]:\n\nSQLSTATE[23000]: Integrity constraint violation: 1048 Column 'employee_id' cannot be null"
我很沮丧,在我错的地方,有人能帮我吗

员工实体:

<?php

namespace Employee\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Library\Entity\BaseEntity;

use Users\Entity\User;
use Organization\Entity\Organization;
//use Organization\Entity\OrgEmployee;

/**
 * Description of Employee
 *
 * @author Macwin
 */

/**
 * @ORM\Entity
 * @ORM\Table(name="employees")
 */

class Employee extends BaseEntity{

    /**
     * @ORM\OneToOne(
     *     targetEntity="Users\Entity\User"
     * )
     * @ORM\JoinColumn(
     *     name="user_id",
     *     referencedColumnName="id",
     *     nullable=false
     * )
     */
    private $user;

    /**
     * @ORM\Column(name="employee_code", type="string")
     * @var string
     */
    protected $empCode;

    /**
     * @ORM\OneToOne(
     *     targetEntity="Organization\Entity\Organization"
     * )
     * @ORM\JoinColumn(
     *     name="org_id",
     *     referencedColumnName="id",
     *     nullable=false
     * )
     */
    private $organization;

    /**
     * @ORM\OneToMany(targetEntity="Employee\Entity\OrgEmployee", mappedBy="employee")
     */
    protected $orgEmployee;

    public function __construct() {

        $this->organizations = new \Doctrine\Common\Collections\ArrayCollection();

    }

    public function getOrganizations()
    {
        return $this->organizations;
    }

    public function addOrganization(Organization $organization = null)
    {
        $this->organizations->add($organization);
    }

    public function setUser(User $user = null)
    {
        $this->user = $user;

        return $this;
    }

    public function getUser()
    {
        return $this->user;
    }

    public function getEmpCode() {
        return $this->empCode;
    }

    public function setEmpCode($empCode) {
        $this->empCode = $empCode;
        return $this;
    }

    public function setOrganization(Organization $organization = null)
    {
        $this->organization = $organization;

        return $this;
    }

    public function getOrganization()
    {
        return $this->organization;
    }

    public function __toString() {
        return __CLASS__ . ": [id: {$this->id}, name: {$this->name}]";
    }
}
<?php

namespace Employee\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Library\Entity\BaseEntity;
use Employee\Entity\Employee;
use Organization\Entity\Organization;

/**
 * Description of Org Employees
 *
 * @author Macwin
 */

/**
 * @ORM\Entity
 * @ORM\Table(name="org_branch_employees")
 */

class OrgEmployee extends BaseEntity{

    /**
     * @ORM\ManyToOne(targetEntity="Employee\Entity\Employee", inversedBy="orgEmployee")
     * @ORM\JoinColumn(name="employee_id",referencedColumnName="id",nullable=false)
     */
    protected $employee;

    /**
     * @ORM\ManyToOne(targetEntity="Organization\Entity\Organization", inversedBy="orgEmployee")
     * @ORM\JoinColumn(name="org_branch_id", referencedColumnName="id", nullable=false)
     */
    protected $organization;

    public function setEmployees(Employee $employee = null)
    {
        $this->employees = $employee;

        return $this;
    }

    public function getEmployees()
    {
        return $this->employees;
    } 

    public function setOrganizations(Organization $organization = null)
    {
        $this->organizations = $organization;

        return $this;
    }

    public function getOrganizations()
    {
        return $this->organizations;
    }    


}

在OrgEmployee实体中存在问题,它应该是setEmployee()和setOrganization(),我有$this->employees而不是$this->employees

    class OrgEmployee extends BaseEntity{

        /**
         * @ORM\ManyToOne(targetEntity="Employee\Entity\Employee", inversedBy="orgEmployee")
         * @ORM\JoinColumn(name="employee_id",referencedColumnName="id",nullable=false)
         */
        protected $employee;

        /**
         * @ORM\ManyToOne(targetEntity="Organization\Entity\Organization", inversedBy="orgEmployee")
         * @ORM\JoinColumn(name="org_branch_id", referencedColumnName="id", nullable=false)
         */
        protected $organization;

        public function setEmployee(Employee $employee = null)
        {
            $this->employee = $employee;

        return $this;
    }

    public function getEmployee()
    {
        return $this->employee;
    } 

    public function setOrganization(Organization $organization = null)
    {
        $this->organization = $organization;

        return $this;
    }

    public function getOrganization()
    {
        return $this->organization;
    }    


}

我知道组织有很多员工,员工可以属于很多组织。您不需要创建新实体。应该是这样的:

员工类别

/**
 * @var Organization | ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Organization\Entity\Organization", mappedBy="employees")
 */
protected $organizations;

/**
 * @return ArrayCollection|Organization
 */
public function getOrganizations()
{
    return $this->organizations;
}

/**
 * @param Organization $organization
 * @return $this
 */
public function addOrganization(Organization $organization)
{
    if (!$this->organizations->contains($organization)) {
        $this->organizations->add($organization);
    }

    return $this;
}

/**
 * @param Organization $organization
 * @return $this
 */
public function removeOrganization(Organization $organization)
{
    if ($this->organizations->contains($organization)) {
        $this->categories->removeElement($category);
    }

    return $this;
}
/**
 * @var Employee | ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Employee\Entity\Employee", inversedBy="organizations")
 * @ORM\JoinTable(name="org_employees",
 *      joinColumns={@ORM\JoinColumn(name="organization_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="employee_id", referencedColumnName="id")}
 *      )
 */
protected $employees;

getter, add, remove methods here..
组织类

/**
 * @var Organization | ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Organization\Entity\Organization", mappedBy="employees")
 */
protected $organizations;

/**
 * @return ArrayCollection|Organization
 */
public function getOrganizations()
{
    return $this->organizations;
}

/**
 * @param Organization $organization
 * @return $this
 */
public function addOrganization(Organization $organization)
{
    if (!$this->organizations->contains($organization)) {
        $this->organizations->add($organization);
    }

    return $this;
}

/**
 * @param Organization $organization
 * @return $this
 */
public function removeOrganization(Organization $organization)
{
    if ($this->organizations->contains($organization)) {
        $this->categories->removeElement($category);
    }

    return $this;
}
/**
 * @var Employee | ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Employee\Entity\Employee", inversedBy="organizations")
 * @ORM\JoinTable(name="org_employees",
 *      joinColumns={@ORM\JoinColumn(name="organization_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="employee_id", referencedColumnName="id")}
 *      )
 */
protected $employees;

getter, add, remove methods here..

注意我的代码中的错误(我写得很快)-这应该只是概念性的展示。

仔细查看OrgEmployee中的目标实体。复制/粘贴问题。@Cerad感谢您的评论,我已经更改了链接表中的额外列,因此我无法以这种方式执行操作OK,不幸的是,在您的示例中,我看不到链接表中的额外列。返回到错误=>您正在尝试在链接表中为employee_id列添加空的新记录。此列不能为空-您可以向我显示负责创建此插入的代码吗?