【问题标题】:Doctrine/Symfony - I have some errors. Something wrong with my relationsDoctrine/Symfony - 我有一些错误。我的关系有问题
【发布时间】:2014-05-19 07:29:20
【问题描述】:

我的实体总是出现异常。我试着和他们一起玩。我在 google 上检查了哪种关系最适合我的实体...但我找不到最佳配置。

我正在创建一个网站,您可以在其中创建一些相册。

一个用户可以有多个专辑。所以我有一个实体专辑,我有一个用户属性:

/**
* Album
*
* @ORM\Table(name="album")
* @ORM\Entity(repositoryClass="Moodress\Bundle\AlbumBundle\Entity\AlbumRepository")
*/

class Album
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/** 
 ** @ORM\ManyToOne(targetEntity="Moodress\Bundle\UserBundle\Entity\User")
 ** @ORM\JoinColumn(nullable=false) 
 */
private $user;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=255)
 */
private $name;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="creationDate", type="datetime")
 */
private $creationDate;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="modificationDate", type="datetime")
 */
private $modificationDate;

 /**
 * @ORM\OneToMany(targetEntity="Moodress\Bundle\AlbumBundle\Entity\Picture", cascade={"persist"}, mappedBy="album")
 */
 private $pictures;

/**
 * Constructor
 */
public function __construct()
{
    $this->creationDate = new \Datetime();
    $this->modificationDate = new \Datetime();
}
 // Get and set
}

但是,当用户在网站上订阅时,我会创建一个名为 Upload 的默认相册,我想将其保留在用户类中。

这是我尝试做的:

/**
* User
*    
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User extends BaseUser  
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
 protected $id;

/**
 * @ORM\OneToOne(targetEntity="Moodress\Bundle\AlbumBundle\Entity\Album", cascade={"persist"})
 */
 protected $albumUpload;

 // Get and set
}

我有这个错误: Undefined index: album in /Users/Sandro/sites/moodress-website/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1608.当我序列化任何具有用户对象的实体时直接出现此错误...

【问题讨论】:

    标签: php symfony orm doctrine-orm doctrine


    【解决方案1】:

    该错误是由User类中$albumUpload属性的关联注解引起的。

    当您在 User 实体中使用 @ORM\OneToOne(targetEntity="Moodress\Bundle\AlbumBundle\Entity\Album") 关联时,Doctrine 假定您在 Album 实体中有 $album 属性。

    试试

    /** 
     ** @ORM\ManyToOne(targetEntity="Moodress\Bundle\UserBundle\Entity\User", inversedBy="albums")
     ** @ORM\JoinColumn(nullable=false) 
     */
    private $user;
    

    在您的相册实体中和

    /**
     * @ORM\OneToMany(targetEntity="Moodress\Bundle\AlbumBundle\Entity\Album", mappedBy="user", cascade={"persist"})
     */
     protected $albums;
    

    在您的用户实体中。另外请将$this->albums = new ArrayCollection()添加到User::__construct()。

    现在,如果您想为用户添加并保留默认相册,您应该在业务逻辑的某个地方实现此功能。您可以找到一种方法来识别相册集合中的默认相册并防止删除,尤其是针对此项目。

    希望这会有所帮助。

    【讨论】:

    • 我在序列化具有用户对象的实体与您的错误之间找不到任何关联...您能否发布导致错误的代码以及您在此上下文中使用的实体?在使用 serialize() 时,任何情况下都不应触发 BasicEntityPersister ...
    【解决方案2】:

    我的错误:

    'Undefined index: album'
    

    Album 类中此注释的结果。

    /**
     * @ORM\OneToMany(
     *      targetEntity="Moodress\Bundle\AlbumBundle\Entity\Picture",
     *      cascade={"persist"}, 
     *      mappedBy="album"
     *  )
     */
    

    我已将 mappedBy 设置为相册,但我的 Picture 类中没有 $album 属性。

    我确实将它添加到我的图片类并清除了我的缓存。

    /**
     * @ORM\ManyToOne(
     *      targetEntity="Moodress\Bundle\AlbumBundle\Entity\Album",
     *      inversedBy="pictures"
     *  )
     */
    protected $album;
    

    解决了我的问题

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 1970-01-01
      • 2013-08-17
      • 2022-08-19
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多