Doctrine:不生成外键

时间:2017-04-24 04:03:07

标签: php symfony doctrine-orm doctrine

我对学说的问题是在

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

它创建数据库但不创建外键。 我正在使用注释,我尝试在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

?>

1 个答案:

答案 0 :(得分:0)

在同一列上指定@ORM\Column@ORM\JoinColumn时,将忽略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的文档。

相关问题