Pasar al contenido principal

Actualizar valores de campos en Drupal 8 y 9

Cuando has de modificar los valores de los campos mediante código, hay varias maneras de hacerlo. La más típica:

$entity->field_name->value = 'foo' 
$entity->field_name->target_id = 123

pero es lo mismo que hacer:

$entity->field_name = 'foo' 
$entity->field_name = 123

Esa es una forma más corta de escribir lo mismo, lo cual es bueno, pero personalmente prefiero usar el método set() de esta manera:

$entity->set('field_name', 'foo'); 
$entity->set('field_name', 123);

De alguna manera, esto se ve y se siente mucho mejor en mi opinión. Vale la pena mencionar que para los campos de referencia de la entidad en lugar del ID de la entidad, puedes configurar el objeto de la entidad de esta manera:

$entity->set('field_name', $another_entity);

Lo mismo también se aplica si no usas el método set() :

$entity->field_name = $another_entity;

¿Qué pasa con los campos de múltiples valores?

Los campos de valores múltiples no son diferentes. Solo tienes que usar matrices. Entonces, en lugar de esto:

$entity->field_name_muti->value = ['foo', 'bar', 'baz']; 
$entity->field_name_multi->target_id = [1, 2, 3];
$entity->field_name_multi->target_id = [$another_entity1, $another_entity2, $another_entity3];

puedes usar esto:

$entity->field_name_muti = ['foo', 'bar', 'baz']; 
$entity->field_name_multi = [1, 2, 3];
$entity->field_name_multi = [$another_entity1, $another_entity2, $another_entity3];

¿Existen excepciones?

Si. No puedes utilizar el método abreviado si tienes un tipo de campo con varias propiedades. Por ejemplo, el campo Precio en Drupal Commerce tiene más de una propiedad. Puedes ver la definición de propiedad del campo de precio aquí . Para establecer el valor de un campo de precio, puede hacer esto:

$entity->field_price->number = 10; 
$entity->field_price->currency_code = 'EUR';

En este caso, debes establecer el valor para las propiedades Número y Código de moneda. La forma alternativa de establecer el campo de propiedades múltiples es la siguiente:

$entity->field_price = ['number' => 99, 'currency_code' => 'EUR'];

Y para campos de varios valores:

$entity->field_prices = [
  ['number' => 10, 'currency_code' => 'EUR'],
  ['number' => 99, 'currency_code' => 'EUR'],
];