cakephp3 迭代 hasMany 关联实体

cakephp3 iterate hasMany associated entities

我们正在使用新的 cakePHP ORM,我在理解新 ORM 处理 hasMany 关联时的工作方式时遇到了一些问题。

例如我们有一个名为 "Users" 的 Table,它与另一个 Table "UsersAbsences" 有一个 hasMany 关系。定义和处理本身工作正常。我们已经定义了 Table-对象和实体。

$this->addAssociations([
'hasMany' => [
    'UsersAbsences' => [
        'className' => 'UsersAbsences',
        'propertyName' => 'absences',
        'foreignKey' => 'user_id'
    ]
]);

在我们的 UsersTable 中,我们创建了一个自定义方法来检索一个用户的详细信息,使用 QueryBuilders ->contain 方法来获取 [=36 定义的 hasMany-associated "UsersAbsences" =] "absence"。我们将视图变量 $user 设置为与模板中的实体一起工作:工作正常。

...
$users->contain(['UsersAbsences',...]);
...

现在是让我困惑的部分: $user 的对象类型是 "UserEntity"。当我现在遍历 $user->absences... 我总是得到 CakeEntity 对象,而不是(如我所料)AbsenceEntity-objects。

问题:我想在 UserAbsence-Entity 中实现一个自定义方法,我想在遍历每个用户缺席时在模板中调用该方法。

当使用 ->contain 方法处理与 "belongsTo" 关联的关联时,我得到了正确的实体 -Class.

有人知道如何处理吗?

注意你的术语,实体 classes 没有 Entity 后缀,这让你的问题有点混乱,因为有人可能认为你已经命名了所有 class错了!请在您的问题中使用实际的,最好是 fully qualified classnames

话虽如此,默认情况下,相应实体的名称是由table class名称得出的,即没有Table后缀的单数名称。因此,UsersTableUserUsersAbsencesTableUsersAbsence,而不仅仅是 Absence.

因此,将 Absence 实体 file/class 重命名为 UsersAbsence 应该可以解决问题。或者,您可以通过 Table::entityClass().

指定实体 class 来手动定义 table 应该使用的实体

另见