Атрибут mappedBy ничего не говорит об имени внешнего ключа, для этого и нужна аннотация "@JoinColumn". Правильное отображение для этого сценария будет:
/**
* @Entity
* @Table(name="comments")
**/
class Comments
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="text") */
private $text;
/**
* @OneToMany(targetEntity="keywords", mappedBy="comment")
*/
private $keywords;
public function getText(){return $this->text;}
public function getId(){return $this->id;}
public function getKeywords(){return $this->keywords;}
}
/**
* @Entity
* @Table(name="keywords")
*/
class Keywords
{
/** @Id @Column(type="integer") */
private $id;
/**
* @ManyToOne(targetEntity="Comments", inversedBy="keywords")
*/
private $comment;
/**
* @Column(type="text") */
private $text;
public function getText(){return $this->text;}
public function getId(){return $this->id;}
}
Используя Schema Tool, он генерирует SQL, равный вашей схеме:
CREATE TABLE comments (id INT NOT NULL, text LONGTEXT NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE keywords (id INT NOT NULL, comment_id INT DEFAULT NULL, text LONGTEXT NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
ALTER TABLE keywords ADD FOREIGN KEY (comment_id) REFERENCES comments(id);
Две проблемы в вашем отображении:
- Вы должны понимать разницу между владением и обратной стороной. Простое однонаправленное отношение «один ко многим» требует третьей таблицы соединений. Однако с двунаправленным отношением, как в моем отображении со свойством sideing Keyword :: $ comment, это работает.
- "mappedBy" относится к свойству другого targetEntity, которое является "другой стороной этой ассоциации". InversedBy имеет примерно то же значение, только что inversedBy всегда указывается на стороне владельца, mappedBy на обратной стороне.
Все это звучит очень сложно, но это очень эффективный способ с технической точки зрения ORM, поскольку он позволяет обновлять ассоциации с наименьшим количеством требуемых операторов SQL UPDATE. Смотрите документы о том, как работает Inverse / Owning:
http://www.doctrine -project.org / проекты / ОРМ / 2,0 / документы / ссылки / ассоциация-отображение / ан # владеющим стороны-и-обратная сторона