2017-04-24 50 views
1

我有一個原則的問題是,學說:外鍵也不會產生

php bin/console doctrine:schema:update --force 

後創建DB而不是外鍵。 我使用註釋,我嘗試使用ManyToOne等註釋中的@ORM \ JoinColumn,但沒有成功。

我希望你們能幫助我。

這裏是我的實體之一的代碼:

<?PHP 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="member") 
*/ 
class Member{ 

/** 
* @ORM\Column(type="string",length=25) 
* @ORM\Id 
*/ 
private $code; 

/** 
* @ORM\Column(type="string",length=25) 
*/ 
private $first_name; 

/** 
* @ORM\Column(type="string",length=25) 
*/ 
private $last_name; 

/** 
* @ORM\Column(type="integer") 
*/ 
private $national_id; 

/** 
* @ORM\Column(type="string",length=25) 
*/ 
private $civil_situation; 

/** 
* @ORM\Column(type="string",length=1) 
*/ 
private $gender; 

/** 
* @ORM\Column(type="date") 
*/ 
private $dob; 

/** 
* @ORM\Column(type="integer") 
*/ 
private $tel_mobile; 

/** 
* @ORM\Column(type="integer") 
*/ 
private $tel_home; 

/** 
* @ORM\Column(type="integer") 
*/ 
private $tel_ref; 

/** 
* @ORM\Column(type="string",length=25) 
*/ 
private $email; 

/** 
* @ORM\Column(type="date") 
*/ 
private $entry_date; 

/** 
* @ORM\Column(type="string",length=64) 
*/ 
private $password; 

/** 
* @ORM\Column(type="integer",nullable=true) 
* @ORM\OneToOne(targetEntity="Staff") 
*/ 
private $staff; 

/** 
* @ORM\Column(type="integer",nullable=true) 
* @ORM\OneToOne(targetEntity="Student") 
*/ 
private $student; 

/** 
* @ORM\Column(type="integer") 
* @ORM\ManyToOne(targetEntity="Address") 
*/ 
private $address; 

/** 
* @ORM\Column(type="integer") 
* @ORM\ManyToOne(targetEntity="Faculty") 
*/ 
private $faculty; 

/** 
* @ORM\Column(type="integer") 
*/ 
private $disable; 

/** 
* @ORM\Column(type="string",length=25,nullable=true) 
*/ 
private $disable_reason; 

/** 
* @ORM\Column(type="integer",nullable=true) 
*/ 
private $disable_year; 

public function __construct() 
{ 
    //nothing 
} 

// getters and setters 

?> 

回答

0

當與@ORM\JoinColumn在同一列沿着指定@ORM\Column,然後JoinColumn的關聯被忽略和外鍵上沒有表創建的。所以不要同時使用@ORM\Column@ORM\JoinColumn

做象下面這樣:

/** 
* @var Address 
* 
* @ORM\ManyToOne(targetEntity="Address") 
* @ORM\JoinColumn(name="address_id", referencedColumnName="id", onDelete="CASCADE") 
*/ 
private $address; 

這使得命名address_id數據庫表列,與外鍵索引和地址記錄,在相關表中相關記錄也被刪除(級聯操作)的缺失。你可以在onDelete上使用其他的操作,參見教義的文檔。

+0

@Lothair您不需要爲關聯指定數據類型,doctrine處理它並根據數據庫引擎分配數據類型。對於MySql,它是int。我的soln是否修復了它?如果修復,請注意。並且請刪除您發佈的這些答案,因爲它們不是答案。 – cpxPratik

+0

哦,好吧我不知道這件事。我正在編輯我的所有實體文檔,所以我會告訴你它是否在我完成時工作 – Lothair

+0

它工作到目前爲止,但我只有一個不工作,我張貼代碼以及給出的錯誤: – Lothair