【问题标题】:cakephp3 iterate hasMany associated entitiescakephp3 迭代 hasMany 关联实体
【发布时间】:2015-10-28 01:51:06
【问题描述】:

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

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

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

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

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

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

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

当对“belongsTo”附加的关联使用 ->contain 方法时,我得到了正确的实体类。

有人知道如何处理吗?

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

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

    话虽如此,默认情况下,对应实体的名称是从表类名中计算出来的,即不带Table后缀的单数名称。所以,对于UsersTable,它是User,对于UsersAbsencesTable,它是UsersAbsence,而不仅仅是Absence

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

    另见

    【讨论】:

    • 非常感谢您的建议,我担心这与文件的命名有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多