示例#1
0
 /**
  * @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?
         }
     }
 }