【问题标题】:How to get has_many objects in DataExtension object?如何在 DataExtension 对象中获取 has_many 对象?
【发布时间】:2020-01-06 20:34:57
【问题描述】:

SS4.4

我有两个类成员和活动。一个成员有很多活动。我有一个扩展成员的类成员扩展。在 MemberExtension 中,我们有一个包含“活动”的 has_many 数组。我们如何获取 MemberExtension 中的活动列表?

我们尝试了以下方法:

$this->Activity()

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

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

错误:未捕获的 BadMethodCallException:Object->__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】:

    在 MemberExtension $this->owner->Activities() 中应该可以工作。

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

    SilverStripe\Security\Member:
      extensions:
        - MemberExtension
    

    假设您的扩展还没有命名空间。

    然后在运行 dev/build/flush 之后,你应该可以调用活动关系,如上所示:

    $activities = $this->owner->Activities(); //name of the relation as always
    

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2023-02-05
      • 2010-11-17
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多