public function preUpdateCallback($data) { if (isset($this->model->getDescription()->getFields()['updated'])) { $data['updated'] = date('Y-m-d H:i:s'); } return $data; }
public function run($field, $data) { $test = []; foreach ($field['name'] as $name) { $test[$name] = isset($data[$name]) ? $data[$name] : null; } if ($this->mode == \ntentan\nibii\DataOperations::MODE_UPDATE) { $primaryKeyFields = $this->model->getDescription()->getPrimaryKey(); $keys = []; foreach ($primaryKeyFields as $name) { $keys[$name] = $data[$name]; } $testItem = $this->model->createNew()->fetchFirst($test); $intersection = array_intersect($testItem->toArray(), $keys); if (!empty($intersection)) { return true; } } else { $testItem = $this->model->createNew()->fields(array_keys($test))->fetchFirst($test); } return $this->evaluateResult($field, $testItem->count() === 0, "The value of " . implode(', ', $field['name']) . " must be unique"); }
/** * * @param RecordWrapper $model */ public function __construct($model) { $this->table = $model->getTable(); $this->name = Nibii::getModelName((new \ReflectionClass($model))->getName()); $relationships = $model->getRelationships(); $adapter = DriverAdapter::getDefaultInstance(); $schema = Db::getDriver()->describeTable($this->table)[$this->table]; $this->autoPrimaryKey = $schema['auto_increment']; foreach ($schema['columns'] as $field => $details) { $this->fields[$field] = ['type' => $adapter->mapDataTypes($details['type']), 'required' => !$details['nulls'], 'default' => $details['default'], 'name' => $field]; if (isset($details['default'])) { $this->fields[$field]['default'] = $details['default']; } if (isset($details['length'])) { $this->fields[$field]['length'] = $details['length']; } } $this->appendConstraints($schema['primary_key'], $this->primaryKey, true); $this->appendConstraints($schema['unique_keys'], $this->uniqueKeys); foreach ($relationships as $type => $relations) { $this->createRelationships($type, $relations); } }
public function doDelete() { Db::getDriver()->beginTransaction(); $parameters = $this->getQueryParameters(false); if ($parameters === null) { $primaryKey = $this->wrapper->getDescription()->getPrimaryKey(); $parameters = $this->getQueryParameters(); $data = $this->wrapper->getData(); $keys = []; foreach ($data as $datum) { if ($this->dataOperations->isItemDeletable($primaryKey, $datum)) { $keys[] = $datum[$primaryKey[0]]; } } $parameters->addFilter($primaryKey[0], $keys); $this->adapter->delete($parameters); } else { $this->adapter->delete($parameters); } Db::getDriver()->commit(); $this->resetQueryParameters(); }
public static function init($namespace) { self::$namespace = $namespace; self::$prefix = Config::get('app.prefix'); self::$prefix = (self::$prefix == '' ? '' : '/') . self::$prefix; self::setupAutoloader(); logger\Logger::init('logs/app.log'); Config::readPath(self::$configPath, 'ntentan'); kaikai\Cache::init(); panie\InjectionContainer::bind(ModelClassResolverInterface::class)->to(ClassNameResolver::class); panie\InjectionContainer::bind(ModelJoinerInterface::class)->to(ClassNameResolver::class); panie\InjectionContainer::bind(TableNameResolverInterface::class)->to(nibii\Resolver::class); panie\InjectionContainer::bind(ComponentResolverInterface::class)->to(ClassNameResolver::class); panie\InjectionContainer::bind(ControllerClassResolverInterface::class)->to(ClassNameResolver::class); panie\InjectionContainer::bind(controllers\RouterInterface::class)->to(DefaultRouter::class); if (Config::get('ntentan:db.driver')) { panie\InjectionContainer::bind(DriverAdapter::class)->to(Resolver::getDriverAdapterClassName()); panie\InjectionContainer::bind(atiaa\Driver::class)->to(atiaa\Db::getDefaultDriverClassName()); } Controller::setComponentResolverParameters(['type' => 'component', 'namespaces' => [$namespace, 'controllers\\components']]); nibii\RecordWrapper::setComponentResolverParameters(['type' => 'behaviour', 'namespaces' => [$namespace, 'nibii\\behaviours']]); controllers\ModelBinderRegister::setDefaultBinderClass(controllers\model_binders\DefaultModelBinder::class); controllers\ModelBinderRegister::register(utils\filesystem\UploadedFile::class, controllers\model_binders\UploadedFileBinder::class); }