2016-02-04 112 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

相關問題