我对学说的问题是在
之后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
?>
答案 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的文档。