Збережіть нове значення за допомогою entit_metadata_wrapper у полі сутності, яке є масивом


9

Мені потрібно зберегти нове значення в полі на об'єкті, і мені було цікаво, чи можна використовувати entit_metadata_wrapper або можливо лише встановити існуюче значення?


саме так мені було встановлено значення $ wrapper-> vimn_related_subjects-> set (масив ($ ключ)); але якщо я хотів додати значення в кінець масиву? це можливо?
Ендрю Велч

Ви пробували $wrapper->vimn_related_subjects[] = $value;?
Клайв

Відповіді:


31

Під час роботи з полями з великим значенням об'єкт обгортки метаданих пов'язаного об'єкта є примірником 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;

"EntityMetadataWrapperException: Array властивості невідомих даних. В EntityStructureWrapper-> getPropertyInfo ()" Я пробую ваш другий підхід, хоча я націлений на певну мову. тобто $ wrapper-> мова ($ lang) -> {$ field} -> set ($ new_array);
AlxVallejo

$w->field_allowed_regions->set(array(null));є єдиним варіантом очищення, який працював у моєму багатозначному еталонному полі систематики.
Неймовірно

3

Я це виявив

$wrapper->field_example[]->set($new_value);

була смертельною невдачею. Але

$wrapper->field_example[NULL]->set($new_value);

було дозволено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.