我们正在使用新的cakePHP ORM,在处理hasMany关联时,我有一些问题需要了解新ORM的工作方式。
E.g。我们有一个名为"用户"它与另一个表" UsersAbsences"有很多关系。定义和处理本身工作正常。我们已经定义了表对象和实体。
$this->addAssociations([
'hasMany' => [
'UsersAbsences' => [
'className' => 'UsersAbsences',
'propertyName' => 'absences',
'foreignKey' => 'user_id'
]
]);
在我们的UsersTable中,我们创建了一个自定义方法,该方法使用QueryBuilders - >包含方法来获取与hasMany相关的" UsersAbsences"由财产定义"缺席"。我们将view-variable $ user设置为使用模板中的Entity:正常工作。
...
$users->contain(['UsersAbsences',...]);
...
现在困扰我的部分: $ user的Object-type是" UserEntity"。当我现在遍历$ user->缺席时......我总是得到CakeEntity对象,而不是(正如我所料)AbsenceEntity对象。
问题:我想在UserAbsence-Entity中实现一个自定义方法,我想在迭代用户的每个缺席时在模板中调用它。
当使用 - > contains方法附加" belongsTo"时,我得到了正确的实体类。
有人知道如何处理这个问题吗?
答案 0 :(得分:1)
请注意您的术语,实体类没有Entity
后缀,这会让您的问题有点混乱,因为您可能会认为您已经错误地命名了所有类!请在问题中使用实际的,理想的fully qualified classnames!
话虽如此,默认情况下,相应实体的名称来自表类名,即没有Table
后缀的单数名称。因此,UsersTable
为User
,而UsersAbsencesTable
为UsersAbsence
,而不仅仅为Absence
。
因此,将Absence
实体文件/类重命名为UsersAbsence
应该可以解决问题。或者,您可以通过Table::entityClass()
指定表格应该使用的实体类。
另见