我的元数据包装器出错了。 我有一个现场测试=>实体引用多个,它是一个选择列表。我得到以下错误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 :(得分:0)
第一个快速提示
$account = entity_load_single('user', $user->uid);
$acc_wrapper = entity_metadata_wrapper('user', $account);
除非您需要加载实体(或者已加载),否则无需加载实体。您只需要id,并让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();
}