Elgg\Database\MetadataTable::create PHP Метод

create() публичный Метод

Metadata can be an array by setting allow_multiple to true, but it is an indexed array with no control over the indexing.
public create ( integer $entity_guid, string $name, string $value, string $value_type = '', integer $owner_guid, integer $access_id = ACCESS_PRIVATE, boolean $allow_multiple = false ) : integer | false
$entity_guid integer The entity to attach the metadata to
$name string Name of the metadata
$value string Value of the metadata
$value_type string 'text', 'integer', or '' for automatic detection
$owner_guid integer GUID of entity that owns the metadata. Default is logged in user.
$access_id integer Default is ACCESS_PRIVATE
$allow_multiple boolean Allow multiple values for one key. Default is false
Результат integer | false id of metadata or false if failure
    function create($entity_guid, $name, $value, $value_type = '', $owner_guid = 0, $access_id = ACCESS_PRIVATE, $allow_multiple = false)
    {
        $entity_guid = (int) $entity_guid;
        $value_type = detect_extender_valuetype($value, $this->db->sanitizeString(trim($value_type)));
        $owner_guid = (int) $owner_guid;
        $allow_multiple = (bool) $allow_multiple;
        if (!isset($value)) {
            return false;
        }
        if ($owner_guid == 0) {
            $owner_guid = $this->session->getLoggedInUserGuid();
        }
        $access_id = (int) $access_id;
        $query = "SELECT * FROM {$this->table}\n\t\t\tWHERE entity_guid = :entity_guid and name = :name LIMIT 1";
        $existing = $this->db->getDataRow($query, null, [':entity_guid' => $entity_guid, ':name' => $name]);
        if ($existing && !$allow_multiple) {
            $id = (int) $existing->id;
            $result = $this->update($id, $name, $value, $value_type, $owner_guid, $access_id);
            if (!$result) {
                return false;
            }
        } else {
            // Support boolean types
            if (is_bool($value)) {
                $value = (int) $value;
            }
            // If ok then add it
            $query = "INSERT INTO {$this->table}\n\t\t\t\t(entity_guid, name, value, value_type, owner_guid, time_created, access_id)\n\t\t\t\tVALUES (:entity_guid, :name, :value, :value_type, :owner_guid, :time_created, :access_id)";
            $id = $this->db->insertData($query, [':entity_guid' => $entity_guid, ':name' => $name, ':value' => $value, ':value_type' => $value_type, ':owner_guid' => (int) $owner_guid, ':time_created' => $this->getCurrentTime()->getTimestamp(), ':access_id' => $access_id]);
            if ($id !== false) {
                $obj = $this->get($id);
                if ($this->events->trigger('create', 'metadata', $obj)) {
                    $this->cache->clear($entity_guid);
                    return $id;
                } else {
                    $this->delete($id);
                }
            }
        }
        return $id;
    }

Usage Example

Пример #1
0
 /**
  * {@inheritdoc}
  */
 public function create($entity_guid, $name, $value, $value_type = '', $owner_guid = 0, $access_id = ACCESS_PRIVATE, $allow_multiple = false)
 {
     $entity = get_entity((int) $entity_guid);
     if (!$entity) {
         return false;
     }
     if (!isset($value)) {
         return false;
     }
     $owner_guid = (int) $owner_guid;
     if ($owner_guid == 0) {
         $owner_guid = $this->session->getLoggedInUserGuid();
     }
     $access_id = (int) $access_id;
     $this->iterator++;
     $id = $this->iterator;
     $time = $this->getCurrentTime()->getTimestamp();
     $row = (object) ['type' => 'metadata', 'id' => $id, 'entity_guid' => $entity->guid, 'owner_guid' => $owner_guid, 'name' => $name, 'value' => $value, 'time_created' => $this->getCurrentTime()->getTimestamp(), 'access_id' => (int) $access_id, 'value_type' => detect_extender_valuetype($value, $this->db->sanitizeString(trim($value_type)))];
     $this->rows[$id] = $row;
     $this->addQuerySpecs($row);
     return parent::create($entity_guid, $name, $value, $value_type, $owner_guid, $access_id, $allow_multiple);
 }