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
后缀的单数名称。因此,UsersTable
是 User
,UsersAbsencesTable
是 UsersAbsence
,而不仅仅是 Absence
.
因此,将 Absence
实体 file/class 重命名为 UsersAbsence
应该可以解决问题。或者,您可以通过 Table::entityClass()
.
指定实体 class 来手动定义 table 应该使用的实体
另见
我们正在使用新的 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
后缀的单数名称。因此,UsersTable
是 User
,UsersAbsencesTable
是 UsersAbsence
,而不仅仅是 Absence
.
因此,将 Absence
实体 file/class 重命名为 UsersAbsence
应该可以解决问题。或者,您可以通过 Table::entityClass()
.
另见