Zend Framework - Doctrine2:ManytoOne Mapping

时间:2012-01-01 23:27:34

标签: php zend-framework frameworks doctrine

好的,如果有人可以帮助我,这将是很好的,因为它似乎是难以处理的。

我在新的zf-boilerplate项目中设置了2个实体,如下所示。我试图按照Zendcasts.com上的教程 - One-to-Many with 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 个答案:

答案 0 :(得分:1)

嗯......我明白了......检查你的专栏名称,gallery_id vs 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")})