我的实体总是遇到异常。我试着和他们一起玩。我查看谷歌哪个关系最适合我的实体...但我找不到最好的配置。
我正在创建一个可以创建相册的网站。
用户可以有多个专辑。所以我有一个实体专辑,我有一个用户属性:
/**
* 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.
当我序列化具有用户对象的任何实体时,会立即出现此错误...
答案 0 :(得分:0)
错误是由User类中$ albumUpload属性的关联注释引起的。
Doctrine假设您在用户实体中使用@ORM\OneToOne(targetEntity="Moodress\Bundle\AlbumBundle\Entity\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()。
现在,如果您要为用户添加保留默认相册,则应在业务逻辑中的某处实现此相册。您可以找到一种方法来识别您的相册集合中的默认相册,并防止删除此项目。
希望这有帮助。
答案 1 :(得分:0)
我的错误:
'Undefined index: album'
来自Album类中的此注释。
/**
* @ORM\OneToMany(
* targetEntity="Moodress\Bundle\AlbumBundle\Entity\Picture",
* cascade={"persist"},
* mappedBy="album"
* )
*/
我已将mappedBy设置为相册,但我的Picture类中没有$ album属性。
我确实将它添加到我的Picture类并清除了我的缓存。
/**
* @ORM\ManyToOne(
* targetEntity="Moodress\Bundle\AlbumBundle\Entity\Album",
* inversedBy="pictures"
* )
*/
protected $album;
它解决了我的问题