繁体   English   中英

主义/交响曲-我有一些错误。 我的关系出了点问题

[英]Doctrine/Symfony - I have some errors. Something wrong with my relations

我的实体总是例外。 我试图和他们一起玩。 我在Google上检查了哪种关系最适合我的实体...但是我找不到最佳的配置。

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

一个用户可以有多个相册,所以我有一个实体相册,并且在user属性里面:

/**
* 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.当我序列化时直接出现此错误具有用户对象的任何实体...

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

当您在用户实体中使用@ORM\\OneToOne(targetEntity="Moodress\\Bundle\\AlbumBundle\\Entity\\Album")关联时,Doctrine假设您的相册实体中具有$ 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()。

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

希望这可以帮助。

我的错误:

'Undefined index: album'

此结果来自Album类中的注释。

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

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

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

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

它解决了我的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM