/** * @param $alias * @param $value * @param bool $raw * @throws \InvalidArgumentException * @throws \Exception */ protected function _set($alias, $value, $raw = false) { $field = $this->metadata->getField($alias); if ($this->inited === true && $field->editable === false) { throw new \Exception("Field '{$alias}' is read-only"); } if (!($field->null && $value === null)) { if ($raw) { $value = $field->fromDbValue($value); } else { $value = $field->cleanValue($value); } } if ($this->metadata->isLocal($alias)) { if ($field->isRelation() && is_object($value)) { $this->relationDataCache[$field->name] = $value; $value = $field->dbPrepValue($value); } $this->data[$alias] = $value; } elseif ($this->metadata->isVirtual($alias)) { if ($field->isRelation()) { $this->relationDataCache[$alias] = $value; $this->data[$field->db_column] = $field->dbPrepValue($value); } else { $this->data[$field->db_column] = $value; // @todo unused? } } }