教条/象征主义-我有一些错误.我的亲戚出了问题


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

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

我正在做一个网站,你可以在那里创建一些相册。

一个用户可以有多个相册。所以我有一个实体相册,我在一个用户属性内:

/**
* 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属性的关联注释引起的。

当您在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()添加到用户::__construct((中。

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

希望这能有所帮助。

我的错误:

'Undefined index: album'

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

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

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

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

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

它解决了我的问题