2017-04-24 8 views
1

を生成していない私は教義と持っている問題はドクトリン:外部キーが

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

た後、それはDBではなく、外部キーを作成することです。 私は注釈を使用していますが、ManyToOne ... etc注釈で@ORM \ JoinColumnを使用しようとしましたが、成功しませんでした。

私はあなたが私を助けることを願っています。ここで

は私のエンティティの一つのコードです:@ORM\Columnは、同じ列に@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

、その後、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で他の操作を行うこともできます(doctrineのドキュメントを参照)。

+0

@Lothair関連付けにデータ型を指定する必要はありません。doctrineはそれを処理し、データベースエンジンに基づいてデータ型を割り当てます。 MySqlについては、intです。私の解決はそれを修正しましたか?それが修正されたらupvoteしてください。また、回答ではないので投稿した回答を削除してください。 – cpxPratik

+0

ああ私はそれについて知らなかった。私は現在、すべてのエンティティのドキュメントを編集していますので、完了したらうまくいっているかどうかを教えてください – Lothair

+0

これまでのところうまくいきましたが、うまくいきません。 – Lothair