原则 2 链接表关系 - 完整性约束违反



我有一个场景,我正在链接下表:

组织员工org_employees

因此,我通过以下方式链接这些内容。

员工 - 一对多 -

组织员工(链接表) - 多对一

但是我收到以下错误:

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]:nnSQLSTATE[23000]: Integrity constraint violation: 1048 Column 'employee_id' cannot be null"

我很沮丧,我错了,谁能帮助我。

员工实体:

<?php
namespace EmployeeEntity;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineORMMapping as ORM;
use LibraryEntityBaseEntity;
use UsersEntityUser;
use OrganizationEntityOrganization;
//use OrganizationEntityOrgEmployee;
/**
 * Description of Employee
 *
 * @author Macwin
 */
/**
 * @ORMEntity
 * @ORMTable(name="employees")
 */
class Employee extends BaseEntity{
    /**
     * @ORMOneToOne(
     *     targetEntity="UsersEntityUser"
     * )
     * @ORMJoinColumn(
     *     name="user_id",
     *     referencedColumnName="id",
     *     nullable=false
     * )
     */
    private $user;
    /**
     * @ORMColumn(name="employee_code", type="string")
     * @var string
     */
    protected $empCode;
    /**
     * @ORMOneToOne(
     *     targetEntity="OrganizationEntityOrganization"
     * )
     * @ORMJoinColumn(
     *     name="org_id",
     *     referencedColumnName="id",
     *     nullable=false
     * )
     */
    private $organization;
    /**
     * @ORMOneToMany(targetEntity="EmployeeEntityOrgEmployee", mappedBy="employee")
     */
    protected $orgEmployee;
    public function __construct() {
        $this->organizations = new DoctrineCommonCollectionsArrayCollection();
    }
    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 OrganizationEntity;
    use DoctrineCommonCollectionsArrayCollection;
    use DoctrineORMMapping as ORM;
    use LibraryEntityBaseEntity;
    use OrganizationEntityOrganizationType;
    use OrganizationEntityOrgEmployee;

    /**
     * Description of Organization
     *
     * @author Macwin
     */
    /**
     * @ORMEntity
     * @ORMTable(name="organizations")
     */
    class Organization extends BaseEntity{

        /**
         * @ORMColumn(name="name", type="string")
         * @var string
         */
        protected $name;
        /**
         * @ORMOneToOne(
         *     targetEntity="OrganizationEntityOrganizationType"
         * )
         * @ORMJoinColumn(
         *     name="org_type_id",
         *     referencedColumnName="id",
         *     nullable=false
         * )
         */
        private $orgType;
        /**
         * 
         * @ORMOneToOne(targetEntity="OrganizationEntityOrganization")
         * @ORMJoinColumn(name="parent_org_id", referencedColumnName="id")
         */
        protected $parent;
        /**
         * @ORMColumn(name="description", type="string")
         * @var string
         */
        protected $description;
        /**
         * @var string
         *
         * @ORMColumn(name="address_line1", type="string", length=255, nullable=true)
         */
        private $addressLine1;
        /**
         * @var string
         *
         * @ORMColumn(name="address_line2", type="string", length=255, nullable=true)
         */
        private $addressLine2;
        /**
         * @var string
         *
         * @ORMColumn(name="zipcode", type="string", length=255, nullable=true)
         */
        private $zipcode;
        /**
         * @ORMOneToOne(
         *     targetEntity="LibraryEntityCountry"
         * )
         * @ORMJoinColumn(
         *     name="country",
         *     referencedColumnName="id",
         *     nullable=false
         * )
         */
        private $country;
        /**
         * @ORMOneToOne(
         *     targetEntity="LibraryEntityState"
         * )
         * @ORMJoinColumn(
         *     name="state",
         *     referencedColumnName="id",
         *     nullable=false
         * )
         */
        private $state;

        /**
         * @ORMOneToOne(
         *     targetEntity="LibraryEntityCity"
         * )
         * @ORMJoinColumn(
         *     name="city",
         *     referencedColumnName="id",
         *     nullable=false
         * )
         */
        private $city;

        /**
         * @ORMOneToOne(
         *     targetEntity="LibraryEntityArea"
         * )
         * @ORMJoinColumn(
         *     name="area",
         *     referencedColumnName="id",
         *     nullable=false
         * )
         */
        private $area;

        /**
         * @ORMOneToMany(targetEntity="EmployeeEntityOrgEmployee", mappedBy="organization")
         */
        protected $orgEmployee;
        public function getName() {
            return $this->name;
        }
        public function setName($name) {
            $this->name = $name;
        }
        public function setOrgType(OrganizationType $orgType = null)
        {
            $this->orgType = $orgType;
            return $this;
        }
        public function getOrgType()
        {
            return $this->orgType;
        }
        public function getParent() {
            return $this->parent;
        }
        public function setParent($parent) {
            $this->parent = $parent;
        }
        public function getDescription() {
            return $this->description;
        }
        public function __toString() {
            return __CLASS__ . ": [id: {$this->id}, name: {$this->name}]";
        }
    }

以下是组织员工实体:

<?php
namespace EmployeeEntity;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineORMMapping as ORM;
use LibraryEntityBaseEntity;
use EmployeeEntityEmployee;
use OrganizationEntityOrganization;
/**
 * Description of Org Employees
 *
 * @author Macwin
 */
/**
 * @ORMEntity
 * @ORMTable(name="org_branch_employees")
 */
class OrgEmployee extends BaseEntity{
    /**
     * @ORMManyToOne(targetEntity="EmployeeEntityEmployee", inversedBy="orgEmployee")
     * @ORMJoinColumn(name="employee_id",referencedColumnName="id",nullable=false)
     */
    protected $employee;
    /**
     * @ORMManyToOne(targetEntity="OrganizationEntityOrganization", inversedBy="orgEmployee")
     * @ORMJoinColumn(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->employee 而不是 $this->employee

    class OrgEmployee extends BaseEntity{
        /**
         * @ORMManyToOne(targetEntity="EmployeeEntityEmployee", inversedBy="orgEmployee")
         * @ORMJoinColumn(name="employee_id",referencedColumnName="id",nullable=false)
         */
        protected $employee;
        /**
         * @ORMManyToOne(targetEntity="OrganizationEntityOrganization", inversedBy="orgEmployee")
         * @ORMJoinColumn(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
 *
 * @ORMManyToMany(targetEntity="OrganizationEntityOrganization", 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
 *
 * @ORMManyToMany(targetEntity="EmployeeEntityEmployee", inversedBy="organizations")
 * @ORMJoinTable(name="org_employees",
 *      joinColumns={@ORMJoinColumn(name="organization_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORMJoinColumn(name="employee_id", referencedColumnName="id")}
 *      )
 */
protected $employees;
getter, add, remove methods here..

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

最新更新