Как получить объекты has_many в объекте DataExtension? - PullRequest
1 голос
/ 06 января 2020

SS4.4

У меня есть два класса Member и Activity. У члена есть много действий. У меня есть класс MemberExtension, который расширяет член. Внутри MemberExtension у нас есть массив has_many, содержащий «Деятельности». Как получить список действий в MemberExtension?

Мы пробовали следующее:

$ this-> Activities ()

Ошибка: необработанная ошибка: вызов неопределенного Метод MemberExtension :: Activities ()

$ this-> getOwner () -> Activities ()

Ошибка: необработанное исключение BadMethodCallException: Object -> __ call (): метод «Деятельности» не существует в 'SilverStripe \ Security \ Member'

Мы также запустили dev / build? flu sh

// 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);

1 Ответ

4 голосов
/ 07 января 2020

В MemberExtension $this->owner->Activities() должно работать.

В Silverstripe CMS 4 вам также необходимо использовать FQCN (полное имя класса, также включающее все пространство имен. Это означает, что вам нужно использовать SilverStripe\Security\Member при добавлении расширения. Это также хорошая практика для использования Конфигурационные файлы yml для добавления расширений к классам, см. документацию .

SilverStripe\Security\Member:
  extensions:
    - MemberExtension

, если ваше расширение еще не имеет пространства имен.

Затем после запуска dev / build / flu sh Вы должны иметь возможность вызывать отношение «Деятельности», как показано выше:

$activities = $this->owner->Activities(); //name of the relation as always
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...