Обертка метаданных сущности

Я получаю сообщение об ошибке с оберткой метаданных.
у меня есть поле test => ссылка на сущность, которая является списком выбора. Я получаю следующую ошибку EntityMetadataWrapperException: указано недопустимое значение данных. Убедитесь, что он соответствует требуемому типу данных и формату.

$account = entity_load_single('user', $user->uid);
$acc_wrapper = entity_metadata_wrapper('user', $account);
$list = $acc_wrapper->test->value();
$exists = FALSE;
if (!empty($list)) {
foreach ($list as $item) {
if ($item->nid == $form_state['storage']['node']->nid) {
$exists = TRUE;
break;
}
}
}
if (!$exists) {
if (!$list) {
$list = array();
$list[] = $form_state['storage']['node']->nid;
}

$acc_wrapper->test->set($list);
$acc_wrapper->save();

0

Решение

Первые быстрые советы

$account = entity_load_single('user', $user->uid);
$acc_wrapper = entity_metadata_wrapper('user', $account);

Вам не нужно загружать объект, если вам не нужно, чтобы он был загружен после (или он уже загружен). Все, что вам нужно, это идентификатор, и позволить магии entity_metadata_wrapper действовать.

$acc_wrapper = entity_metadata_wrapper('user', $user->uid);

Я думаю, что ваша ошибка здесь

if (!$list) {
$list = array();
$list[] = $form_state['storage']['node']->nid;
}

$ list всегда инициируется из-за «$ list = $ acc_wrapper-> test-> value ();», поэтому вы никогда не выполняете условие полностью, а затем пытаетесь вернуть его назад и сохранить (потому что вы пропускаете ‘ }’ )… Не имеет смысла…

Может попробовать эту версию?

$acc_wrapper = entity_metadata_wrapper('user', $user->uid);
$list = $acc_wrapper->test->value();
$exists = FALSE;

if (!empty($list)) {
foreach ($list as $item) {
if ($item->nid == $form_state['storage']['node']->nid) {
$exists = TRUE;
break;
}
}
}
if (!$exists && !$list) {
$list = array($form_state['storage']['node']->nid);

$acc_wrapper->test = $list;
$acc_wrapper->save();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector