首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel连接2个多态双亲

Laravel连接2个多态双亲
EN

Stack Overflow用户
提问于 2016-11-23 19:16:50
回答 1查看 141关注 0票数 1

我正在尝试创建一个查询,该查询可以处理连接多个多态父母的问题。

代码语言:javascript
复制
$this->query->join('time_records AS time', function($join) use($taskTable, $projectTable) {
    $join->on('time.parent_id', '=', $taskTable . '.id', 'and')
        ->on('time.parent_type', '=', Task::class, 'and')
        ->on('time.parent_id', '=', $projectTable . '.id', 'or')
        ->on('time.parent_type', '=', Project::class, 'and');
});

这是因为它不喜欢字符串而不是列名,所以失败了。但我确实觉得这似乎不对。

这只是整个报表类的一部分。在这种情况下,多态表time_records需要连接到两个表。但它需要是一个基本的加入。因此,所有加入的时间记录都在time名称下,因此所使用的列都与整个查询的结构一致。

我在这里加入了许多表,以创建一种假的层次结构。

categories.name as lev1, projects.name AS lev2, tasks.name AS lev3, time.time AS time

这在某种程度上是我构造select的方式,这样集合就可以对名称进行分组,然后对项目进行分组,最后形成一个集合层次结构,我的应用程序可以读取/理解这个层次结构。

我所要寻找的只是一个最终结果,在这个结果中,我可以引用time_records表,该表包含基于项目还是任务的数据(因此,如果它是一个项目,则lev3将为空/空)。我不介意它是否不是一个join,或者它甚至只是一个原始SQL查询。我只是不能用正确的方式来结束我正在寻找的结果,同时保持1查询(因为集合已经负担够多了)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 20:21:17

我想出了一种方法,这更多的是一种心态的改变。

而不是根据您想要的顺序进行查询,只需调整select。因此,如果您想要表中的数据,为它们添加select参数,如果不是在结果中“隐藏”表,而是始终将其连接起来。

这一部分我没有在我的问题中显示,我现在确实看到,在隔离这是一个很难弄清楚的相当重要的部分。

倒转顺序,而不是从顶层向下,从自下而上开始,所以从time_records开始作为查询的主表,并加入所有其他表,这样两个与其相关的表都可以更简单地连接起来。

所以最终的答案是我完全看错了这个。它帮助编写原始SQL输出,以查找该输出并手动查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40772510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档