Мені потрібно зберегти нове значення в полі на об'єкті, і мені було цікаво, чи можна використовувати entit_metadata_wrapper або можливо лише встановити існуюче значення?
$wrapper->vimn_related_subjects[] = $value;
?
Мені потрібно зберегти нове значення в полі на об'єкті, і мені було цікаво, чи можна використовувати entit_metadata_wrapper або можливо лише встановити існуюче значення?
$wrapper->vimn_related_subjects[] = $value;
?
Відповіді:
Під час роботи з полями з великим значенням об'єкт обгортки метаданих пов'язаного об'єкта є примірником EntityListWrapper (Це може бути хорошою ідеєю для перегляду API, щоб переглянути доступні методи. Також зверніть увагу, що цей клас реалізує інтерфейс ArrayAccess )
Тож найпростіший спосіб додати нові значення до EntityListWrapper - це за допомогою оператора "[]":
$wrapper->field_example[] = $new_value;
Це створює новий запис і присвоює йому значення. За допомогою цих методів дельта (зсув у списку значень) створюється автоматично. Ви також можете встановити компенсацію самостійно, якщо бажаєте. Будь-який з трьох наступних методів еквівалентний:
$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);
У всіх трьох випадках це замінить значення, якщо дельта вже існує, і створить новий запис, якщо ні.
Ви також можете безпосередньо встановити масив значень для самого поля. Обидва методи рівнозначні:
$value = array
0 => array('property_example' => 'hello'),
1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);
Однак для цього потрібно знати внутрішню структуру поля, яке ви призначаєте, оскільки ви не використовуєте обгортку метаданих поля.
Нарешті, ви можете спорожнити багатозначне поле, встановивши його в порожнє значення. Усі три методи рівнозначні:
$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;
$w->field_allowed_regions->set(array(null));
є єдиним варіантом очищення, який працював у моєму багатозначному еталонному полі систематики.