使用实体元数据包装器不保存数据

时间:2013-08-21 23:35:45

标签: php drupal-7

我正在使用Drupal 7和实体模块,我有一个名为property的contenttype设置,我正在尝试做的是从xml文件创建内容类型,我有正确的数据,我正在使用entity_metadata_wrapper简化了对字段的插入:

以下是我正在使用的方法:

private function newProperty($propValues) {
    global $user;
    $values = array(
      'type' => 'property',
      'uid' => $user->uid,
      'status' => 1,
      'comment' => 1,
      'promote' => 0,
    );
    $entity = entity_create('node', $values);
    $ewrapper = entity_metadata_wrapper('node', $entity);
    $ewrapper->title->value=$propValues->price_text;
    $ewrapper->field_property_expert_agent_ref->value =$this->xml_attribute($propValues, 'reference');

    foreach ($this->valuesToFetch() as $key=>$value) {
        $ewrapper->{$value}->value=$propValues->$key;
    }
    $ewrapper->save();
    entity_save('node', $entity);
}

$ propValues包含一系列值 $ this-> valuesToFetch()是一个key =>值数组,例如:'department'=>'field_property_department', 我添加了调试代码以确认值是否已经通过,ct被创建但其值​​为空。

我做错了什么?

https://drupal.org/node/1021556

2 个答案:

答案 0 :(得分:1)

要使用entity_metadata_wrapper设置字段值,您必须使用->set()方法或依赖magic methods来提供更多代码清晰度。

// 1. Using ->set()
// Single value 
$wrapper->field_data->set($value);
// Multi value
$wrapper->field_data[]->set($value); // Add to field array
$wrapper->field_data[$delta]->set($value); // Set specific value

// 2. Using magic methods 
// Single value 
$wrapper->field_data = $value
// Multi value
$wrapper->field_data[] = $value; // Add to field array
$wrapper->field_data[$delta] = $value; // Set specific value

// 3. Deleting values
// 'Unset' a field value (there is no delete method)
$wrapper->field_data->set(NULL);
$wrapper->field_data = NULL; 

Drupal 7 Entity metadata wrappers documentation. A good blog post that has some useful insights!

答案 1 :(得分:1)

使用set()方法作为提到的revagomes或魔术方法__set()

$wrapper->field_data = $value; // Maaaagic !

这种方式更具可读性;)给代码评论员留下深刻印象:p