使用CakePHP 4.1.6
在我的数据库中有两个表,分别叫做Categories
和CategoryChanges
。Categories
表很简单,因为它包含一个带有几个类别的ID和名称的列表,例如:
id | name
------------
1 | Foo
------------
2 | Bar
------------
3 | Baz
------------
我的另一个表CategoryChanges
是一个日志,记录了应用程序中的类别(如Categories
)何时被更改,以及其他一些数据,如更改者和更改时间。
在CategoryChanges
中,有两列category_id_from
和category_id_to
,它们对应于Categories.id
。
因此,作为示例,CategoryChanges
可以包括以下内容:
id | category_id_from | category_id_to | created | user | notes
--------------------------------------------------------------------
80 | 2 | 3 | 2021-02-03 | John | abcdef
--------------------------------------------------------------------
81 | 3 | 3 | 2021-03-15 | Jack | ghi
--------------------------------------------------------------------
82 | 1 | 2 | 2021-03-18 | Dave | zzz
--------------------------------------------------------------------
我想做的是在网页上输出一个表格,显示上面的信息,但不是用category_id_from
和category_id_to
作为数字ID,我想显示Categories.name
。注意,对于某些行,“from”和“to”值也可能是相同的(作为一个例子,请参见CategoryChanges.id = 81
)。
所以我想要的输出是这样的:
id | category_from | category_to | created | user | notes
--------------------------------------------------------------------
80 | Bar | Baz | 2021-02-03 | John | abcdef
--------------------------------------------------------------------
81 | Baz | Baz | 2021-03-15 | Jack | ghi
--------------------------------------------------------------------
82 | Foo | Bar | 2021-03-18 | Dave | zzz
--------------------------------------------------------------------
在阅读了Query Builder文档后,我不知道如何做到这一点。
我的假设是,我需要从CategoryChanges
表中读取数据,这很简单:
// in a Controller method
$CategoryChanges = $this->getTableLocator->get('CategoryChanges');
$query = $CategoryChanges->find();
如果我执行$query->toArray()
,我将得到上面的第二个表,其中包含category_id_from
和category_id_to
的数字ID。
我假设$query
需要额外的条件--或者可能是虚拟字段--用于“category from”和“category to”。我不知道如何将这两个列连接到Categories
,以便可以按照表3得到Categories.name
。
1条答案
按热度按时间wsewodh21#
例如,您可以简单地将这些字段的两个
belongsTo
关联添加到CategoryChanges
表中,然后轻松地将innerJoinWith()
用于您的查询,如下所示:第一个