Laravel Mysql DB加入2个多态父母

时间:2016-11-23 19:16:50

标签: php mysql laravel join laravel-5.3

我正在尝试创建一个可以处理加入多个多态父项的查询。

$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需要加入。但它基本上需要1次加入。因此,所有加入的时间记录都在time名称下,因此所使用的列都与整个查询的结构一致。

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

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

这就是我如何构建select,以便集合可以对名称进行分组,然后将项目分组并向下分组,最后得到我的应用程序可以读取/理解的集合层次结构。

我正在寻找的是一个最终结果,我可以根据项目或任务(如果它的项目是lev3那样)来引用包含该行数据的time_records表只是为空/空白)。如果它不是连接,或者它甚至只是一个原始SQL查询,我不介意。我只是无法绕过正确的方式来结束我正在寻找的结果,同时保持它为1查询(因为集合足够的税收)。

1 个答案:

答案 0 :(得分:0)

我想出了一种方式,而且更多的是改变了心态。

而不是根据您想要的顺序进行查询,只需调整选择即可。因此,如果您需要来自表的数据,请为它们添加select参数,否则为#34;隐藏"结果中的表格,但总是加入。

这一部分我没有在我的问题中显示,我确实看到现在分离为什么这是一个难以理解的事情是非常重要的。

反转顺序,而不是从顶层向下,从下往上,所以从time_records开始作为查询的主表并加入所有其余的,这样两个表都与它可以更简单。

所以最后答案是我完全以错误的方式看待这个问题。它有助于写出原始的SQL输出来查找并手动查询。