Zend Framework - Doctrine2: сопоставление ManytoOne - PullRequest
2 голосов
/ 02 января 2012

Хорошо, если кто-нибудь может мне помочь с этим, это было бы здорово, потому что это кажется неразрешимым.

У меня есть 2 объекта, настроенные в новом проекте zf-шаблон, как показано ниже.Я пытаюсь следовать учебному пособию на Zendcasts.com - Один-ко-многим с Doctrine 2 , но не могу получить доктрину, чтобы распознать ассоциации, которые я наметил.Если я запускаю orm:schema-tool:create --dump-sql, он выводит сгенерированный Sql, но НЕ операторы ALTER TABLE в конце, которые должны были бы создать сопоставление внешнего ключа, я не могу заставить это работать должным образом.

Я перепробовал все, что мог придумать, оператор JOIN, который мне нужно запустить, очевидно, тоже не работает, но я решил, что если я смогу заставить Doctrine распознать оператор ALTER, я смогу перенести его оттуда,

Любые идеи были бы отличными, дайте мне знать, если вам нужна дополнительная информация.Сначала я подумал, что, возможно, файл .ini настроен неправильно, но я думаю, что это больше связано с аннотацией отношений?

Библиотека / Фото / Сущность / Gallery.php

<?php

namespace Photo\Entity;

/**  
 * @Entity(repositoryClass="Photo\Entity\Repository\MyGallery")  
 * @Table(name="gallery")  
 */  

class Gallery {   

 /**  
 * @Id @GeneratedValue  
 * @Column(type="smallint",nullable=false)  
 * @var integer  
 * @OneToMany(targetEntity="Photo", mappedBy="galleryID")  
 */  

 protected $id;  

 /**  
 * @Column(type="string", length=200)  
 * @var string  
 */   
 protected $gallery;  

Библиотека / Фото / Сущность / Photo.php

<?php  

namespace Photo\Entity;  

 /**  
 * @Entity(repositoryClass="Photo\Entity\Repository\MyPhoto")  
 * @Table(name="photo")  
 */  

class Photo {  

 /**  
 * @Id @GeneratedValue  
 * @Column(type="smallint",nullable=false)  
 * @var integer  
 */  
 protected $id;  

  /**  
 * @Column(type="smallint",nullable=false)  
 * @var integer  
 * @ManyToOne(targetEntity="Gallery")  
 * @JoinColumns({  
 *    @JoinColumn(name="gallery_id", referencedColumnName="id")  
 * })  
 */   
 protected $galleryID;  

1 Ответ

1 голос
/ 03 января 2012

Хм ... Понятно ... Проверьте имена столбцов, gallery_id против galleryID выглядит подозрительно.

Если это gallery_id, то вы должны изменить аннотацию $galleryID на @Column(type="smallint", nullable=false, name="gallery_id")

Как правило, везде в объектной модели следует использовать имена полей объекта, напримерmappedBy="galleryID", но сам столбец должен отображаться с соответствующим именем БД, как я уже упоминал @Column(name="gallery_id"), или, например, @JoinColumns({@JoinColumn(name="gallery_id" referencedColumnName="id")})

...