gpt4 book ai didi

php - Laravel Mysql DB 加入 2 个多态父类

转载 作者:行者123 更新时间:2023-11-30 22:08:52 24 4
gpt4 key购买 nike

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

$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 需要加入 2 个表。但基本上需要 1 个连接。所以所有连接的时间记录都在时间名称下,所以使用的列都符合整体查询的结构。

我在这里连接了很多表,以创建一种虚假的层次结构。

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

这在某种程度上是我构建选择的方式,这样集合就可以对名称进行分组,然后将其下的项目分组,最后得到一个我的应用程序可以读取/理解的集合层次结构。

我正在寻找的是一个最终结果,我可以在其中引用 time_records 表,该表包含基于项目或任务的行数据(因此,如果它是一个项目那么 lev3 将只是空/空白)。我不介意它是否不是连接,或者它是否只是一个原始 SQL 查询。我只是无法用正确的方法来结束我正在寻找的结果,同时将其保持为 1 个查询(因为集合已经足够繁重)。

最佳答案

我想出了一个办法,更多的是改变了心态。

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

这部分我没有在我的问题中展示,现在我确实看到它对于隔离为什么这是一个难以弄清楚的问题非常重要。

颠倒顺序,而不是从顶层向下,而是从下向上,所以从 time_records 作为查询的主表开始,然后连接所有其余表,这样两个表与之相关的可以更简单地加入。

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

关于php - Laravel Mysql DB 加入 2 个多态父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40772510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com