/** * {@inheritdoc} */ protected function write(array $record) { $dbData = ['channel' => $record['channel'], 'level' => $record['level_name'], 'message' => $record['formatted']] + $record['additionalFieldsData']; $this->db->insert($this->table, $dbData); $this->clean($record['channel']); }
/** * Save entity to database table. * * @param AbstractDbEntity $dbEntity * @return bool */ public function save(AbstractDbEntity $dbEntity) { if ($dbEntity->shouldBeDeletedFromDbOnSave()) { // Only delete if previously saved to db if ($dbEntity->getPrimaryDbValue()) { $this->delete($dbEntity); } return false; } if ($dbEntity->shouldInsertOnDbSave()) { // Note that database data always contains all properties, with defaults for non set properties $dataToSave = $dbEntity->getDbData(); } else { if ($dbEntity->hasModifiedDbProperties()) { $dataToSave = $dbEntity->getModifiedDbData(); } else { // Return if no value has been modified and it's not an insert // (we always want to insert if no id exist, since some child objects might // depend on the this primary id being available) return false; } } // We don't the want to insert/update primary value unless forced insert if (!$dbEntity->shouldForceDbInsertOnSave()) { $primaryKey = $dbEntity->getPrimaryDbPropertyKey(); if (is_array($primaryKey)) { foreach ($primaryKey as $keyPart) { unset($dataToSave[$keyPart]); } } else { unset($dataToSave[$primaryKey]); } } // Convert & check data $sqlData = []; foreach ($dataToSave as $propertyName => $value) { if ($value && $dbEntity->getDbPropertyMaxLength($propertyName) && mb_strlen($value) > $dbEntity->getDbPropertyMaxLength($propertyName)) { throw new \RuntimeException("Database field \"{$propertyName}\" exceeds field max length (value: \"{$value}\")"); } elseif (empty($value) && $dbEntity->getDbPropertyNonEmpty($propertyName)) { throw new \RuntimeException("Database field \"{$propertyName}\" is empty and required"); } elseif ((string) $value === '' && $dbEntity->getDbPropertyRequired($propertyName)) { throw new \RuntimeException("Database field \"{$propertyName}\" is required to be set"); } // Set data keys db field format $fieldName = $dbEntity->getDbFieldName($propertyName); $sqlData[$fieldName] = $value; } // Insert new database row if ($dbEntity->shouldInsertOnDbSave()) { $this->db->insert($dbEntity->getDbTableName(), $sqlData); if (!is_array($dbEntity->getPrimaryDbPropertyKey()) && !empty($lastInsertId = $this->db->getLastInsertId())) { $dbEntity->setPrimaryDbValue($lastInsertId); } // Update existing database row } else { $this->db->update($dbEntity->getDbTableName(), $sqlData, $this->getPrimaryKeyWhereSql($dbEntity), $this->getPrimaryKeyWhereParameters($dbEntity)); } $dbEntity->clearModifiedDbProperties(); $dbEntity->setForceDbInsertOnSave(false); return true; }