2016-02-04 59 views
0

我有一种情况,我在哪里链接如下表:学说2链接表的关系 - 完整性约束违规

组织 员工 org_employees

所以我在下面的方式联系起来entoties。

员工 - 一对多 - 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 Organization\Entity; 

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

    use Organization\Entity\OrganizationType; 
    use Organization\Entity\OrgEmployee; 


    /** 
    * Description of Organization 
    * 
    * @author Macwin 
    */ 

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

    class Organization extends BaseEntity{ 



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

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

     /** 
     * 
     * @ORM\OneToOne(targetEntity="Organization\Entity\Organization") 
     * @ORM\JoinColumn(name="parent_org_id", referencedColumnName="id") 
     */ 
     protected $parent; 

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

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

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

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

     /** 
     * @ORM\OneToOne(
     *  targetEntity="Library\Entity\Country" 
     *) 
     * @ORM\JoinColumn(
     *  name="country", 
     *  referencedColumnName="id", 
     *  nullable=false 
     *) 
     */ 
     private $country; 

     /** 
     * @ORM\OneToOne(
     *  targetEntity="Library\Entity\State" 
     *) 
     * @ORM\JoinColumn(
     *  name="state", 
     *  referencedColumnName="id", 
     *  nullable=false 
     *) 
     */ 
     private $state; 


     /** 
     * @ORM\OneToOne(
     *  targetEntity="Library\Entity\City" 
     *) 
     * @ORM\JoinColumn(
     *  name="city", 
     *  referencedColumnName="id", 
     *  nullable=false 
     *) 
     */ 
     private $city; 


     /** 
     * @ORM\OneToOne(
     *  targetEntity="Library\Entity\Area" 
     *) 
     * @ORM\JoinColumn(
     *  name="area", 
     *  referencedColumnName="id", 
     *  nullable=false 
     *) 
     */ 
     private $area; 


     /** 
     * @ORM\OneToMany(targetEntity="Employee\Entity\OrgEmployee", 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}]"; 
     } 
    } 

这里是OrgEmployee实体:

<?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; 
    }  


} 
+1

仔细看看OrgEmployee中的目标实体。复制/粘贴问题。 – Cerad

+0

@Cerad感谢您的评论,我已更改 – user3929758

回答

0

有一个在OrgEmployee实体的问题,应该是setEmployee()和setOrganization(),并且我有$ this-> employees而不是$ this-> employee

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; 
    }  


} 
0

我明白,组织有许多员工和员工可以属于许多组织。你不需要创建新的实体。它应该是这样的:

Employee类

/** 
* @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; 
} 

组织CLASS

/** 
* @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.. 

当心在我的代码中的错误(我很快就写了这个) - 它应该是唯一的概念展示。

+0

链接表中有一个额外的列,所以我coulnt以这种方式做 – user3929758

+0

好吧,不幸的是,我不能在链接表中的示例额外的列中看到。返回错误=>您尝试在链接表中为** employee_id **列添加** null **的新记录。这个列不能为空 - 你能告诉我代码负责创建这个**插入**吗? – LuckyLue

相关问题