Exemplo n.º 1
0
 /**
  * @inheritdoc
  */
 public static function populateRecord($record, $row, ConnectionInterface $connection = null)
 {
     if (!isset($connection)) {
         $connection = static::getConnection();
     }
     if ($connection->typeCast) {
         $columns = static::getTableSchema($connection)->columns;
         foreach ($row as $name => $value) {
             if (isset($columns[$name])) {
                 $row[$name] = $columns[$name]->phpTypecast($value);
             } elseif (is_array($value)) {
                 $row[$name] = ArrayHelper::toType($value);
             }
         }
     }
     parent::populateRecord($record, $row);
 }
Exemplo n.º 2
0
 /**
  * @inheritdoc
  */
 public static function populateRecord($record, $row, ConnectionInterface $connection = null)
 {
     $columns = static::getIndexSchema($connection)->columns;
     if ($connection->typeCast) {
         foreach ($row as $name => $value) {
             if (isset($columns[$name])) {
                 if ($columns[$name]->isMva) {
                     $mvaValue = explode(',', $value);
                     $row[$name] = array_map([$columns[$name], 'phpTypecast'], $mvaValue);
                 } else {
                     $row[$name] = $columns[$name]->phpTypecast($value);
                 }
             }
         }
     }
     parent::populateRecord($record, $row);
 }
Exemplo n.º 3
0
 /**
  * Populates an active record object using a row of data from the database/storage.
  *
  * This is an internal method meant to be called to create active record objects after
  * fetching data from the database. It is mainly used by {@see \rock\db\ActiveQuery} to populate
  * the query results into active records.
  *
  * When calling this method manually you should call {@see \rock\db\common\BaseActiveRecord::afterFind()} on the created
  * record to trigger the {@see \rock\db\common\BaseActiveRecord::EVENT_AFTER_FIND}.
  *
  * @param BaseActiveRecord $record the record to be populated. In most cases this will be an instance
  * created by {@see \rock\db\common\BaseActiveRecord::instantiate()} beforehand.
  * @param array $row attribute values (name => value)
  */
 public static function populateRecord($record, $row)
 {
     $columns = array_flip($record->attributes());
     foreach ($row as $name => $value) {
         $record->_attributes[$name] = $value;
         if (isset($columns[$name])) {
             $record->_attributes[$name] = $value;
         } elseif ($record->canSetProperty($name)) {
             $record->{$name} = $value;
         }
     }
     if ($fields = $record->fields()) {
         foreach ($fields as $name => $value) {
             if ($value instanceof \Closure) {
                 $record->_attributes[$name] = call_user_func($value);
             }
         }
     }
     $record->_oldAttributes = $record->_attributes;
 }