Php 从多对多关系的反向侧保存问题
我有两个实体:Php 从多对多关系的反向侧保存问题,php,doctrine-orm,symfony,Php,Doctrine Orm,Symfony,我有两个实体:AudioPlaylist和AudioTrack AudioPlaylist.php: /** * @ORM\ManyToMany(targetEntity = "AudioTrack", inversedBy = "audioPlaylists") * @ORM\JoinTable(name = "audioplaylist_audiotrack") * * @var ArrayCollection */ protected $audioTracks; AudioTr
AudioPlaylist
和AudioTrack
AudioPlaylist.php:
/**
* @ORM\ManyToMany(targetEntity = "AudioTrack", inversedBy = "audioPlaylists")
* @ORM\JoinTable(name = "audioplaylist_audiotrack")
*
* @var ArrayCollection
*/
protected $audioTracks;
AudioTrack.php:
/**
* @ORM\ManyToMany(targetEntity = "AudioPlaylist", mappedBy = "audioTracks")
*
* @var ArrayCollection
*/
protected $audioPlaylists;
我的问题是,当我调用$audioTrack->addAudioPlaylist($audioPlaylist)
时,audioPlaylist\u audioTrack
表不会得到更新。我希望在表中添加一个新行,表示这两个实体之间的关系。尽管$audioPlaylist->addAudioTrack($audioTrack)
添加了一个新行,但反向操作一切正常
我正在确保持久化
$audioTrack
并刷新实体管理器,但运气不好,因此我认为我的注释一定有问题(我正在使用。有什么想法吗?这可能是因为您没有为您的反面设置级联
属性。您必须明确定义Doctrine2才能持久化任何相关实体
/**
* @ORM\ManyToMany(targetEntity = "AudioPlaylist",
* mappedBy = "audioTracks",
* cascade = {"persist", "remove"})
*
* @var ArrayCollection
*/
protected $audioPlaylists;
在调用AudioTrack::addAudioPlaylist()
时,确保也将您的AudioTrack
添加到AudioPlaylist
中:
将
$playlist->getAudioTracks()->add($this);
添加到addAudioPlaylist()
使其工作,但级联选项没有效果。我需要修改addAudioPlaylist()似乎有些奇怪
但是,这是可行的。特别是因为它是由Symfony@arms我对层叠选项的结果好坏参半,有时有效,有时无效。至于自动生成,它并不完全完美,我建议在遇到困难时使用。您可以阅读更多有关使用关联管理方法的信息从…起
public function addAudioPlaylist(AudioPlaylist $playlist)
{
$this->getAudioPlaylists()->add($playlist);
$playlist->getAudioTracks()->add($this);
}