I have a content type (let's name it Wheel for an example) that have a field referencing an other content type (which could be Car, Motorbike, Bicycle ...). So a node named WheelMotorbikeBrand whould reference the content type Motorbike. I would like to retrieve the value of this field in a preprocess with something like $node->get('field_wheel-type') but I'm not able to obtain a value. How can I retrieve the value of my field ?
2 Answers
You get a field value:
$value = $node->field_text->value; If the field has a property value like fields for texts, numbers or booleans usually have.
A reference field has no value property, but one for target_id. So you get the id of the referenced entity with:
$target_id = $node->field_reference->target_id; Or the referenced entity already loaded:
$referenced_node = $node->field_reference->entity; Which you then can use to obtain a field value from the referenced node:
$value = $referenced_node->field_text->value; The method ->getValue():
$values = $node->field_text->getValue(); gets an array of all properties and field items and so works also if you don't know the properties of a field or how many items it has.
Caveat: You don't find the property entity from the example above in this array, because it is computed and not stored in the database.
try :
$value = $node->get('field_wheel-type')->getValue(); - It's working indeed. What is the difference between ->getValue() and ->value ? I thought it was the same. Thanks for the answer.Tibo– Tibo2018-10-25 14:05:32 +00:00Commented Oct 25, 2018 at 14:05
- ->value is a protected attribute. ->getValue() is a public method to get that protected attribute.izus– izus2018-10-25 14:19:35 +00:00Commented Oct 25, 2018 at 14:19