# Item Metadata ## Item Metadata Repository ### `if ( $item_metadata->get_field()->get_parent() > 0 && is_null($item_metadata->get_meta_id()) )` When we are adding a metadatum that is child of another, this means it is inside a compound metadatum In that case, if the Item_Metadata object is not set with a meta_id, it means we want to create a new one and not update an existing. This is the case of a multiple compound metadatum. ### `public function delete($item_metadata)` **Returns:** mixed|void ### `public function add_compound_value(Entities\Item_Metadata_Entity $item_metadata, $meta_id)` **Returns:** `null|ind` — the meta id of the created compound metadata ### `public function fetch($object, $output = null )` Fetch Item Metadatum objects related to an Item **Parameters:** * `$object` — Entities\Item **Returns:** array ### `public function get_value(Entities\Item_Metadata_Entity $item_metadata)` Get the value for a Item metadatum. **Parameters:** * `$item_metadata` — Entities\Item_Metadata_Entity **Returns:** mixed ### `private function extract_compound_value(array $ids, Entities\Item $item, $compund_meta_id)` Transforms the array saved as meta_value with the IDs of post_meta saved as a value for compound metadata and converts it into an array of Item Metadatada Entitites **Parameters:** * `$ids` — array — The array of post_meta ids * `$item` — Entities\Item — The item this post_meta is related to * `$compund_meta_id` — int — the meta_id of the parent compound metadata **Returns:** `array` — An array of Item_Metadata_Entity objects ### `public function update( $object, $new_values = null )` **Returns:** mixed ### `public function suggest($item_metadata)` Suggest a value to be inserted as a item Metadatum value, return a pending log **Parameters:** * `$item_metadata` — Entities\Item_Metadata_Entity **Returns:** Entities\Log ## Item Metadata Entity ### `class Item_Metadata_Entity extends Entity` Represents the Item Metadatum Entity ### `protected $repository = 'Item_Metadata'` {@inheritDoc} ### `function __construct(Item $item, Metadatum $metadatum, $meta_id = null, $parent_meta_id = null)` **Parameters:** * `$item` — Item — Item Entity * `$metadatum` — Metadatum — Metadatum Entity * `$meta_id` — int — ID for a specific meta row ### `function set_item(Item $item)` Define the item **Parameters:** * `$item` — Item **Returns:** void ### `function set_value($value)` Define the metadatum value **Parameters:** * `|` — [integer — string] $value **Returns:** void ### `function set_field(Metadatum $metadatum)` Define the metadatum **Parameters:** * `$metadatum` — Metadatum **Returns:** void ### `function set_meta_id($meta_id)` Set the specific meta ID for this metadata. When this value is set, get_value() will use it to fetch the value from the post_meta table, instead of considering the item and metadatum IDs **Parameters:** * `$meta_id` — int — the ID of a specifica post_meta row ### `function set_parent_meta_id($parent_meta_id)` Set parent_meta_id. Used when a item_metadata is inside a compound Metadatum When you have a multiple compound metadatum, this indicates of which instace of the value this item_metadata is attached to **Parameters:** * `$parent_meta_id` — [type] — [description] ### `function get_item()` Return the item **Returns:** Item ### `function get_field()` Return the metadatum **Returns:** Metadatum ### `function get_meta_id()` Return the meta_id **Returns:** Metadatum ### `function get_parent_meta_id()` Return the meta_id **Returns:** Metadatum ### `function get_value()` Return the metadatum value **Returns:** `string` — | integer ### `function is_multiple()` Return true if metadatum is multiple, else return false **Returns:** boolean ### `function is_collection_key()` Return true if metadatum is key **Returns:** boolean ### `function is_required()` Return true if metadatum is required **Returns:** boolean ### `function validate()` Validate attributes **Returns:** boolean