使用条令2删除Zend中多对多实体的记录
Delete record from many to many entity in Zend using Doctrine 2
我正在研究Zend学说。我有一个多对多实体groups_contacts
,它具有链接到相关表group
和contact
并在group
实体中创建的字段group_id
和contact_id
。
我在group
实体中创建groups_contacts
,这是一种多对多关系。
以下是删除操作的代码:
public function deleteGroupMemberAction() {
$auth_service = $this->getServiceLocator()->get('doctrine.authenticationservice.orm_default');
$objectManager = $this->getServiceLocator()->get('Doctrine'ORM'EntityManager');
$em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
$user = $auth_service->getIdentity();
//die($_POST['g_id'] . ' removed');
$query_deleteMember = $em->createQuery('delete from groups_contacts gc where gc.contact_id = 7 and gc.group_id = 1');
$numDeleted = $query_deleteMember->execute();
die($query_deleteMember. ' removed');
$objectManager->flush();
die($title . ' removed');
}
此函数调用了ajax调用,该调用运行良好。
我不知道为什么删除查询不起作用,我尝试了其他方法,但得到了相同的结果。有人有什么想法吗?
您必须指定到实体的映射
delete from MyMapping:groups_contacts gc where gc.contact_id = 7 and gc.group_id = 1
或者放上你的命名空间:
delete from Your'Name'Space'groups_contacts gc where gc.contact_id = 7 and gc.group_id = 1
但这还不够,因为您不能直接访问这些contact_id
和group_id
列。所以你必须写:
delete from MyMapping:groups_contacts gc JOIN gc.contact c JOIN gc.group g where c.id = 7 and g.id = 1
哇两个加入。。这在本机SQL中应该更简单。它甚至执行那些JOIN吗?也许Doctrine会对其进行优化,而不会在最终查询中使用JOIN。
这个用例有点奇怪。假设你有一个网站,上面列出了群组及其联系人。关系由groups_contacts表示(在网站说明中,只有当关系需要保存数据时,才应将其作为一个单独的实体)。然后,当用户想要删除一个关系(断开联系人与群组的连接)时,该关系(由groups_contacts表示)可以用它自己的id来识别。然后,您的查询将变为:
DELETE FROM MyMapping:groups_contacts gc WHERE gc.id = <user clicked relation>
这是的解决方案
控制器
$group=$em->find("Application''Entity''group",$group_id);
if ($group->getCreatedBy()->getId() == $user->getId()) {
$contact = $em->find("Application'Entity'UserProfile", $contact_id);
if (isset($contact)) {
$group->getContacts()->removeElement($contact);
$objectManager->persist($group);
$objectManager->flush();
}
集团实体
/**
*
* @ORM'ManyToMany(targetEntity="UserProfile")
* @ORM'JoinTable(name="groups_contacts",
* joinColumns={@ORM'JoinColumn(name="group_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM'JoinColumn(name="contact_id", referencedColumnName="id")}
* )
*/
私人$联系人
最好以这种方式处理多对多关系,在这种关系中,您必须使用removeElement从关联实体中获取要删除的组和联系人id,然后使用组的相关id进行持久化
相关文章:
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- AngularJs对所有页面中的所有记录进行排序
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- window.location替换并传递URL历史记录条目中的变量
- Javascript历史记录转换为php行
- JavaScript,PHP-用JavaScript将多个数据库记录发送到变量或表
- 猫鼬在特定记录中查找嵌套记录
- 浏览器何时记录历史记录
- 将一个表的id与另一个表中的user_id进行匹配,以获取mysql中的记录
- 更新成员数据模型中的记录列表
- 如何使用提交按钮搜索表中的记录
- 正在OrientDB中嵌入函数中的记录
- 微风得到的是实体而不是对象的集合
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- Box2D多个实体的一个夹具
- 根据关系 1:N 检索其他实体的记录
- 使用条令2删除Zend中多对多实体的记录
- MS CRM 2015使用JavaScript编辑并显示来自另一个实体记录iFrame的id自定义实体记录
- CRM 2011 - Javascript按钮-更改所有实体记录上的字段
- 在不修改/创建实体记录的情况下触发插件