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

SS4.4

我有两个类Memberactivity。成员有很多活动。我有一个类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);
lty83938477 回答:如何在DataExtension对象中获取has_many对象?

在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
本文链接:https://www.f2er.com/2811784.html

大家都在问