如何在DataExtension对象中获取has_many对象?

问题描述 投票:0回答:1

SS4.4

我有两个类Member和Activity。成员有很多活动。我有一个类MemberExtension,它扩展了Member。在MemberExtension内部,我们有一个has_many数组,其中包含“活动”。我们如何在MemberExtension中获得活动列表?

我们尝试了以下操作:

$ this-> Activities()

错误:未捕获的错误:调用未定义的方法MemberExtension :: Activities()

$ this-> getOwner()-> Activity()

错误:未捕获的BadMethodCallException:对象-> __ call():'SilverStripe \ Security \ Member'上不存在方法'Activities'

我们还运行过dev / build?flush

// MemberExtension class
class MemberExtension extends DataExtension {
    public static $has_many = [
        'Activities' => Activity::class
    ];
}

// Activity class
class Activity extends DataObject {
    private static $has_one = [
        'Member' => Member::class,
    ];
}

// Register MemberExtension in _config.php
Member::add_extension(MemberExtension::class);
silverstripe silverstripe-4
1个回答
0
投票

在MemberExtension $this->owner->Activities()中应该起作用。

[在Silverstripe CMS 4中,您还需要使用FQCN(完全限定的类名,也包括整个名称空间。这意味着添加扩展名时需要使用SilverStripe\Security\Member。这也是将yml配置文件用于为类添加扩展,请参见documentation

SilverStripe\Security\Member:
  extensions:
    - MemberExtension

假设您的扩展程序还没有名称空间。

然后,在运行dev / build / flush之后,您应该能够调用Activity关系,如上所示:

$activities = $this->owner->Activities(); //name of the relation as always
© www.soinside.com 2019 - 2024. All rights reserved.