繁体   English   中英

Symfony2 / Doctrine2双重加入

Symfony2/Doctrine2 double join

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下情况:名为HRMgmt的表包含由另一个用户引起的某个用户发生的事件,因此在我的实体类中有:

/**
 * @ORM\ManyToOne(targetEntity="User")
 */
protected $user;

/**
 * @ORM\ManyToOne(targetEntity="User")
 */
protected $changed_by;

我想进行双重联接以获取与此事件相关的用户的ID,名称和姓氏,以及导致HRMgmt事件的用户的ID,名称和姓氏(称为changed_by)

我的查询建立如下:

$events = $this->getEntityManager()
        ->createQuery(
        'SELECT u1.id currentuserid, u1.name currentusername, u1.surname currentusersurname, u2.id changedbyuserid, u2.name changedbyusername, u2.surname changedbyusersurname, h.is_active, h.timestamp, h.started_at, h.finished_at, r.name rolename FROM AppBundle:HRMgmtEvent h, AppBundle:Role r
         INNER JOIN h.user u1
         INNER JOIN h.changed_by u2
         WHERE h.project = :projectid
         AND h.role = r.id
         ORDER BY h.timestamp DESC, h.is_active DESC' 
        )
        ->setParameter('projectid', $project->getId())
        ->getResult();

但是会引发以下错误找不到列:1054'on子句'中的未知列'h2_.user_id'

连接是否正确执行? 我在这里想念什么?

问题类似于以下内容: JOIN DQL(symfony2)两个表之间的多个联接

其实我的情况更简单,因为我不能有空值...

我的数据库与我已运行的实体同步:

php app/console doctrine:schema:update --force

编辑:

这是HRMgmt的架构:

CREATE TABLE `hrmgmt` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`project_id` int(11) DEFAULT NULL,
`changed_by_id` int(11) DEFAULT NULL,
`started_at` datetime DEFAULT NULL,
`finished_at` datetime DEFAULT NULL,
`is_active` tinyint(1) NOT NULL,
`timestamp` datetime NOT NULL,
`role_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_B3C74883A76ED395` (`user_id`),
KEY `IDX_B3C74883828AD0A0` (`changed_by_id`),
KEY `IDX_B3C74883166D1F9C` (`project_id`),
KEY `IDX_B3C74883D60322AC` (`role_id`),
CONSTRAINT `FK_B3C74883166D1F9C` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`),
CONSTRAINT `FK_B3C74883828AD0A0` FOREIGN KEY (`changed_by_id`) REFERENCES `fos_user` (`id`),
CONSTRAINT `FK_B3C74883A76ED395` FOREIGN KEY (`user_id`) REFERENCES `fos_user` (`id`),
CONSTRAINT `FK_B3C74883D60322AC` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1042 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

这是用户:

CREATE TABLE `fos_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
...several other fields...
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`surname` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_957A647992FC23A8` (`username_canonical`),
UNIQUE KEY `UNIQ_957A6479A0D96FBF` (`email_canonical`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

谢谢!

1 个回复

这两个属性都映射到数据库上的同一字段user_id ,这是Doctrine在ManyToOne关联(model_id)上的默认映射。 为了解决这个问题,您应该为每个属性选择不同的列名称,如下所示:

/**
 * @ORM\ManyToOne(targetEntity="User")
 * @ORM\JoinColumn(name="user_id")
 */
protected $user;

/**
 * @ORM\ManyToOne(targetEntity="User")
 * @ORM\JoinColumn(name="changed_by_id")
 */
protected $changed_by;

之后,您应该可以加入。

1 使用doctrine2在symfony2中加入子查询

我试图在我的symfony2应用程序中执行以下SQL。 SQL的摘要是 原始SQL是 首先,我尝试使用querybuilder在这种情况下似乎不受支持。 现在我意识到我需要使用NativeQuery。 但是我对填充ResultSetMapping感到困惑。 我一直在关 ...

4 Symfony2 / Doctrine2继承

我试图在Doctrine 2中完成BASIC继承,但是遇到了几个主要问题。 这样的任务不应该那么复杂。 我们开始谈正事吧... 我有三个类,BaseFoodType,Drink和Snack。 我的BaseFoodType具有以下类定义: 遵循该学说网站上的继承说明: http ...

6 Symfony2,Doctrine2,更新实体

我想使用对控制器的ajax调用将实体更新到数据库中。 但是,我只知道如何使用Symfony的表单更新实体。 目前,我有一个将由jQuery方法附加的表单,并通过ajax提交,但由于在控制器中的操作而迷失了方向。 阿贾克斯: 现在在我的控制器上: 有什么建议吗? ...

7 与Doctrine2(Symfony2)的内部联接

我是Symfony2的新手(〜1周)。 我在BudgetData实体上有一个manyToOne,它加入了实体BudgetDescription的ID。 我创建了一个要为Doctrine复制的SQL查询: SELECT d, e FROM BudgetData d INNER JOIN Bu ...

8 从Doctrine2和Symfony2接收到多对多的实体

我有两个实体: 通话实体: 标签实体: REST控制器用于接收带有相应标记数组的Call实体数组: 表联接工作正常:添加新标签可在calls_tags表内创建有效关系。 但是我无法接收对应调用的标签:上面显示的控制器代码段为每个调用返回空标签数组,即使datata ...

9 Doctrine2 和 Symfony2 的级联问题

我正在为我的应用程序使用 Symfony2,并且我正在使用两个实体管理器; 一个用于读取,另一个用于写入。 我正在创建这样的实体管理器对象: $em = $this->getDoctrine()->getEntityManager('write'); $em = $this->g ...

10 Symfony 2与Doctrine 2单表继承

在基于Symfony 2 + Doctrine 2的项目中,我采用以下方法(基于FOSU​​serBundle源代码)实现模型: 属于模型的所有类都在我包的“模型”文件夹中 在“实体”文件夹中,我有一些类,这些类从Model扩展了类 在“ Resources / con ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM