cakephp3 iterate hasMany associated entities

时间:2015-08-05 10:30:27

标签: cakephp cakephp-3.0

我们正在使用新的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"时,我得到了正确的实体类。

有人知道如何处理这个问题吗?

1 个答案:

答案 0 :(得分:1)

请注意您的术语,实体类没有Entity后缀,这会让您的问题有点混乱,因为您可能会认为您已经错误地命名了所有类!请在问题中使用实际的,理想的fully qualified classnames

话虽如此,默认情况下,相应实体的名称来自表类名,即没有Table后缀的单数名称。因此,UsersTableUser,而UsersAbsencesTableUsersAbsence,而不仅仅为Absence

因此,将Absence实体文件/类重命名为UsersAbsence应该可以解决问题。或者,您可以通过Table::entityClass()指定表格应该使用的实体类。

另见