SS4.4
我有两个班级的会员和活动。成员有很多活动。我有一个类MemberExtension,它扩展了Member。在MemberExtension内部,我们有一个包含“活动”的has_many数组。我们如何在MemberExtension中获得活动列表?
我们尝试了以下方法:
$ this-> Activities()
错误:未捕获错误:调用未定义的方法MemberExtension :: Activities()
$ this-> getOwner()-> Activity()
错误:未捕获BadMethodCallException:对象-> __ call():方法'Activities'在'SilverStripe \ Security \ Member'上不存在
我们还运行了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);
在MemberExtension中$this->owner->Activities()
应该起作用。
在Silverstripe CMS 4中,您还需要使用FQCN(完全合格的类名,又包括整个名称空间。这意味着您SilverStripe\Security\Member
在添加扩展名时需要使用。使用yml配置文件向类添加扩展名也是一种好习惯,请参阅文档。
SilverStripe\Security\Member:
extensions:
- MemberExtension
假设您的扩展程序还没有名称空间。
然后,在运行dev / build / flush之后,您应该能够调用Activity关系,如上所示:
$activities = $this->owner->Activities(); //name of the relation as always
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句