在Symfony2中保存与数据库的多对多关系
发布时间:2020-12-12 16:30:40 所属栏目:MsSql教程 来源:网络整理
导读:在我的Symfony2项目中,我有两个相关实体:用户和收藏夹.他们有多对多的关系. 我的申请工作如下: 在我的Twig页面,我有几个项目,按钮“添加到收藏夹”.当您单击按钮时,我的控制器将item_id保存在收藏夹列中.但是我想要保存 将项目添加到他的收藏夹和我的应用程
|
在我的Symfony2项目中,我有两个相关实体:用户和收藏夹.他们有多对多的关系.
我的申请工作如下: 用户和收藏夹存在,但用户和收藏夹之间的连接列保持为空. 这是我的代码: 实体用户 class Users implements AdvancedUserInterface
{
/**
* @var DoctrineCommonCollectionsArrayCollection
*
* @ORMManyToMany(targetEntity="Favorites",inversedBy="user",cascade={"persist"})
* @ORMJoinTable(name="user_has_favorite",* joinColumns={
* @ORMJoinColumn(name="user_id",referencedColumnName="user_id")
* },* inverseJoinColumns={
* @ORMJoinColumn(name="favorite_id",referencedColumnName="favorite_id")
* }
* )
*/
private $favorite;
public function __construct()
{
$this->favorite = new DoctrineCommonCollectionsArrayCollection();
}
public function addFavorite(GeoCityTroopersBundleEntityFavorites $favorite)
{
$this->favorite[] = $favorite;
return $this;
}
...
实体收藏 class Favorites
{
/**
* @var DoctrineCommonCollectionsArrayCollection
*
* @ORMManyToMany(targetEntity="Users",mappedBy="favorite",cascade={"persist"})
*/
private $user;
public function __construct()
{
$this->user = new DoctrineCommonCollectionsArrayCollection();
}
public function addUser(GeoCityTroopersBundleEntityUsers $user)
{
$this->user[] = $user;
return $this;
}
我的控制器 public function showNewsAction()
{
$request = $this->get('request');
$itemId=$request->request->get('itemId');
if($itemId != NULL)
{
//MAKE NEW FAVORITE AND ADD TO DATABASE LINKED WITH ITEM
$favorite = new Favorites();
$favorite->setItemId($itemId);
//LINK FAVORITE ID WITH USER ID IN JOINCOLUMN
$userId = 6;
$em = $this->getDoctrine()->getEntityManager();
$user = $em->getRepository('GeoCityTroopersBundle:Users')->find($userId);
$favorite->addUser($user);
$em->persist($favorite);
//I TRIED THIS TOO,BUT IT FAILED
/*$user->addFavorite($favorite);
$em->persist($user);*/
$em->flush();
解决方法你在那儿很近对于学说多对多关系,您需要调用两个添加方法$favorite->addUser($user); $user->addFavorite($favorite); $em->persist($favorite); $em->persist($user); $em->flush(); 这应该是诀窍.在the docs他们这样做,但不要太明确地提及.不知道为什么因为很多人遇到这个(包括我自己). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |








