XF 2.1 Как правильно прокинуть отношения между уже существующими сущностями?

Версия XenForo
2.1.x

ArtiOnMoon

Проверенные
Сообщения
64
Реакции
36
Баллы
715
Здравствуйте. Работаю с таблицей xf_user_field_value и у меня возникла потребность использовать юзернеймы в представлении, когда в самой таблице их нет, но есть user_id. Задумался о том, чтобы прокинуть релейшен между xf_user и xf_user_field_value, чтобы тянуть юзернеймы, однако что-то пошло не так.
Я расширил сущность UserFieldValue с помощью следующего кода:

PHP:
public static function getStructure(Structure $structure)
    {
        $structure = parent::getStructure($structure);
        $structure->relations = [
        'User' => [
            'entity' => 'XF:User',
            'type' => self::TO_ONE,
            'conditions' => 'user_id',
            'primary' => true
        ],
        ];

        return $structure;
    }

В итоге я получил запись в структуре о наличии связи, но не массив данных. Вот дамп переменной. Что я делаю не так?
Без названия.png
 
ну естественно в структуре не будет данных...
В структуре есть сам релейшен. И я видел как в плагинах других разрабов можно тянуть данные через релейшен. А вот самих данных, что надо тянуть нет (в #_relations).


Дамп какой переменной?
Я вызываю переменную которая содержит сущность UserFieldValue, к которой я пробрасываю релейшен. Если совсем уточнять, то вытаскиваю из таблицы xf_user_field_value значения файндером

PHP:
$finder = \XF::finder('XF:UserFieldValue');
    $users = $finder->where('field_id', 'wallet')->fetch();
 
Последнее редактирование:
ArtiOnMoon, реляция не будет вытаскиваться по дефолту сама. Её либо движок вытащит отдельным запросом при первом обращении, либо можно в файндере дёрнуть with(), тогда он вытащит джойном её (не работает с TO_MANY реляциями, пока).
Или ещё можно в defaultWith в структуре прописать, чтобы сразу вытаскивало.
 
Последнее редактирование:
  • Мне нравится
Реакции: Hope
ArtiOnMoon, реляция не будет вытаскиваться по дефолту сама. Её либо движок вытащит отдельным запросом при первом обращении, либо можно в файндере дёрнуть with()
Или ещё можно в defaultWith в структуре прописать.
Ага, вот оно как. Спасибо. Поресерчу.

Разобрался. Надо было внимательнее читать документацию. Спасибо.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу