이것은 Symfony에서 Doctrine2를 사용하여 달성하고자하는 것입니다.Doctrine2 일대 다 관계가 작동하지 않습니다. Symfony2
http://www.freeimagehosting.net/97g8z이 링크에는 ER 모델의 이미지가 있습니다.
class Nacionalidad
{
/**
* @var integer $idpais
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Pais")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*
*/
private $idpais;
/**
* @var integer $idciudadano
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Ciudadano")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*
*/
private $idciudadano;
/**
* @var date $fecha
*
* @ORM\Column(name="fecha", type="date")
*/
private $fecha;
...
:
class Ciudadano
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $nombre
*
* @ORM\Column(name="nombre", type="string", length=255)
*/
private $nombre;
이 중간에 클래스 Nacionalidad입니다 :
class Pais
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $nombre
*
* @ORM\Column(name="nombre", type="string", length=255)
*/
private $nombre;
...
이 클래스 Ciudadano입니다 :
그래서,이 내 클래스입니다 다음 명령 후 :
CREATE TABLE Ciudadano (id INT AUTO_INCREMENT NOT NULL, nombre VARCHAR(255) NOT
NULL, apellido VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE Nacionalidad (id INT NOT NULL, fecha DATE NOT NULL, descripcion VAR
CHAR(255) NOT NULL, INDEX IDX_8B2C843BBF396750 (id), PRIMARY KEY(id)) ENGINE = I
nnoDB;
CREATE TABLE Pais (id INT AUTO_INCREMENT NOT NULL, nombre VARCHAR(255) NOT NULL,
PRIMARY KEY(id)) ENGINE = InnoDB;
ALTER TABLE Nacionalidad ADD CONSTRAINT FK_8B2C843BBF396750 FOREIGN KEY (id) REF
ERENCES Ciudadano(id);
그래서 난이 의심이 :
php app/console doctrine:schema:create
교리는이 SQL을 생성
- Doctrine2 테이블 파이스를 참조하는 외래 키를 생성하지 않는 이유는 무엇입니까?
- 왜 nctionalidad 'idpais'및 'idciudadano'테이블의 속성이 해당 테이블의 기본 키임을 나타내려면 Doctrine2가 alter table을 생성하지 않습니다?
- Doctrine에 외래 키인 필드의 유형을 알려야합니까? (또는 Doctrine2가 타입을 추측합니까?)
- 테이블에 나타나는 것은 일대 다 관계입니다. 왜 다 대일이 필요한가요? 나는 이해하고 싶다.
이 부분에 도움이 필요합니다. 미정 :
- 나는 내 수업에 적절한 주석을 쓰고 있지 않다, 또는
- 나는 개념을받지 못했습니다.
그래서 나는 오려고 내가이 주석을 사용하여 내가 원하는 것을 달성 할 수 있음을 발견
class Nacionalidad
{
/**
* @var integer $idpais
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Pais", inversedBy="Nacionalidad")
* @ORM\JoinColumn(name="idpais", referencedColumnName="id")
*
*/
private $idpais;
/**
* @var integer $idciudadano
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Ciudadano", inversedBy="Nacionalidad")
* @ORM\JoinColumn(name="idciudadano", referencedColumnName="id")
*
*/
private $idciudadano;
/**
* @var date $fecha
*
* @ORM\Column(name="fecha", type="date")
*/
private $fecha;
파이스와 Ciudadano 테이블이 동일합니다. 나는 그들 안에 아무 것도 바꾸지 않았다. (나는 이것이 내가 가진 문제와 관련이 있는지 모른다.)
내가 한 테스트는 다음과 같습니다. doctrine에 테이블을 생성하라고 말한 후 필자는 phpmyadmin에 가서 테이블과 관계가 내가 원하는 것임을 확인했습니다. 그리고 그들은 그렇습니다. 그러나 :
내가 Nacionalidad에 행 삽입하기 위해 노력하고있어 :
$nacionalidad->setidpais('1');
$nacionalidad->setidciudadano('1');
$nacionalidad->setfecha('1989-02-01');
$nacionalidad->setdescripcion('Hola');
내가 ID 1이있는 테이블의 파이스의 행 확신을, 나는 ID로 테이블 ciudadano의 행 확신 1이 존재합니다.내가 주석과의 관계에 문제가있는 생각
Warning: spl_object_hash() expects parameter 1 to be object, string given in C:\wamp\www\sym\vendor\doctrine\lib\Doctrine\ORM\UnitOfWork.php line 1218
:
는이 오류를 받고 있어요. 나는 그것이해야하는 것처럼 나는 아마 그것을하지 않을 것이라고 생각한다. 의견 있으십니까? 나는 잃어 버렸다.
중간 테이블 (nacionalidad)의 추가 입력란을 사용하여 many to many 관계를 만들려고하십니까? – smoreno
안녕하세요, 나는 fecha가 스페인어로 생년월일을 의미한다고 생각합니다 (저는 프랑스 인이므로 확실하지 않습니다). 그렇다면 Ciudadano 엔티티에 저장하지 않으시겠습니까? 그런 다음이 주석을 단순화 할 수 있습니다. – greg0ire
Fecha는 날짜를 의미합니다. 날짜는 생일이 될 수 있습니다 (생일은 fecha de nacimiento 또는 cumpleaños 임). 그래서 나는 그것이 내가 원하는 것이 아니기 때문에 Ciudadano에 그것을 저장할 수 없다. 그러나 도와 줘서 고마워. :). –