public function setup() { if (!$this->_modelStructure->hasColumn($this->_valueField)) { $this->_modelStructure->addColumn($this->_valueField, array('type' => 'varchar(255)'))->saveStructure(); ModelOperator::getInstance()->updateDBForModel($this->_modelName); } }
/** * Update database and models */ public function updateAllAction() { QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0'); ModelOperator::getInstance(DC::getEnvironment()->getUserClassesRoot() . 'db/')->updateDBForAllModels(); ModelOperator::getInstance()->generateAllModelClasses(); $this->writeln('DB updated'); }
protected static function putTestContent() { QC::executeSQL('DROP TABLE IF EXISTS products'); $storagePath = __DIR__ . '/storage/'; $mo = ModelOperator::getInstance($storagePath); $mo->generateBasicStructure('Product'); $ms = new ModelStructure('Product'); $ms->addColumn('id_brand', array('type' => 'int(11) unsigned')); $ms->saveStructure(); $mo->generateAllModelClasses(); $mo->updateDBForAllModels(); require_once $storagePath . 'bases/BaseProduct.php'; require_once $storagePath . 'classes/Product.php'; QC::create('products')->insert(array('title' => 'Macbook air'))->execute(); $testProductFileContent = <<<TEXT <?php class ProductCustom extends BaseProduct { private \$_internalManufacturer = 'solve'; public function getManufacturer() { return \$this->_internalManufacturer; } public function setManufacturer(\$value) { \$this->_internalManufacturer = \$value; return \$this; } } TEXT; file_put_contents($storagePath . 'classes/ProductCustom.php', $testProductFileContent); require_once $storagePath . 'classes/ProductCustom.php'; $mo->setStructureForModel('ProductCustom', $mo->generateBasicStructure('Product', false), false); }
/** * Generates default database model structure */ public function modelAction() { $name = ucfirst(Inflector::camelize($this->getFirstParamOrAsk('Enter model name'))); $path = DC::getEnvironment()->getUserClassesRoot() . 'db/'; $mo = ModelOperator::getInstance($path); if ($mo->getModelStructure($name)) { $this->warning('model ' . $name . ' is already exists', '~ model exists, skipping:'); return true; } $mo->generateBasicStructure($name); $mo->saveModelStructure($name); $this->notify($path . 'structure/' . $name . '.yml', '+ model created'); }
protected static function putTestContent() { QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0'); QC::executeSQL('DROP TABLE IF EXISTS brands'); $storagePath = __DIR__ . '/storage/'; $mo = ModelOperator::getInstance($storagePath); $mo->generateBasicStructure('Brand'); ModelStructure::getInstanceForModel('Brand')->addAbility('slug')->saveStructure(); $mo->generateAllModelClasses(); require_once $storagePath . 'bases/BaseBrand.php'; require_once $storagePath . 'classes/Brand.php'; $mo->updateDBForAllModels(); }
protected static function putTestContent() { QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0'); QC::executeSQL('DROP TABLE IF EXISTS brands'); $storagePath = __DIR__ . '/storage/'; $mo = ModelOperator::getInstance($storagePath); $mo->generateBasicStructure('User'); ModelStructure::getInstanceForModel('User')->dropColumn('title')->addColumn('name', array('type' => 'varchar(255)', 'validation' => array('CustomName' => array('class' => 'Solve\\Database\\Tests\\CustomNameValidationRule', 'error' => 'invalid name')), 'process' => array('trim')))->addColumn('email', array('type' => 'varchar(255)'))->saveStructure(); $mo->generateDataProcessorRules('User'); $mo->generateAllModelClasses(); require_once $storagePath . 'bases/BaseUser.php'; require_once $storagePath . 'classes/User.php'; $mo->updateDBForAllModels(); }
protected static function putTestContent() { QC::executeSQL('DROP TABLE IF EXISTS products'); $storagePath = __DIR__ . '/storage/'; $mo = ModelOperator::getInstance($storagePath); $mo->generateBasicStructure('Product'); $ms = new ModelStructure('Product'); $ms->addColumn('info', array('type' => 'array')); $ms->saveStructure(); $mo->generateAllModelClasses(); $mo->updateDBForAllModels(); require_once $storagePath . 'bases/BaseProduct.php'; require_once $storagePath . 'classes/Product.php'; QC::create('products')->insert(array('title' => 'Macbook air'))->execute(); }
protected static function putTestContent() { QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0'); QC::executeSQL('DROP TABLE IF EXISTS brands'); $storagePath = __DIR__ . '/storage/'; $mo = ModelOperator::getInstance($storagePath); $mo->generateBasicStructure('Brand'); ModelStructure::getInstanceForModel('Brand')->addAbility('files', array('logo' => array('name' => 'original', 'multiple' => true), 'info' => array(), 'avatar' => array('sizes' => array('small' => array('size' => '100x100', 'method' => 'fitOut')))))->saveStructure(); $mo->generateAllModelClasses(); require_once $storagePath . 'bases/BaseBrand.php'; require_once $storagePath . 'classes/Brand.php'; $webRoot = __DIR__ . '/upload/'; FilesAbility::setBaseStoreLocation($webRoot); FSService::setWebRoot($webRoot); FSService::unlinkRecursive($webRoot); $mo->updateDBForAllModels(); }
protected static function putTestContent() { QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0'); QC::executeSQL('DROP TABLE IF EXISTS products'); QC::executeSQL('DROP TABLE IF EXISTS brands'); QC::executeSQL('DROP TABLE IF EXISTS brands_translate'); $storagePath = __DIR__ . '/storage/'; $mo = ModelOperator::getInstance($storagePath); $mo->generateBasicStructure('Product'); $mo->generateBasicStructure('Brand'); ModelStructure::getInstanceForModel('Product')->addColumn('id_brand', array('type' => 'int(11) unsigned'))->addRelation('brand')->saveStructure(); ModelStructure::getInstanceForModel('Brand')->addRelation('products')->addAbility('translate', array('columns' => array('title')))->saveStructure(); $mo->generateAllModelClasses(); require_once $storagePath . 'bases/BaseProduct.php'; require_once $storagePath . 'bases/BaseBrand.php'; require_once $storagePath . 'classes/Product.php'; require_once $storagePath . 'classes/Brand.php'; ModelOperator::getAbilityInstanceForModel('Brand', 'Translate')->cleanup(); $mo->updateDBForAllModels(); }
public function testBasic() { $mo = ModelOperator::getInstance(self::$_storagePath); $this->assertEmpty($mo->getModelStructure('User'), 'Empty structure returns array()'); $mo->generateBasicStructure('User'); $data = $mo->getModelStructure('User'); $this->assertEquals(array('table' => 'users', 'columns' => array('id' => array('type' => 'int(11) unsigned', 'auto_increment' => true), 'title' => array('type' => 'varchar(255)')), 'indexes' => array('primary' => array('columns' => array('id')))), $data, 'Basic structure generator is ok'); $mo->saveModelStructure('User'); $this->assertFileExists(self::$_storagePath . 'structure/User.yml', 'Save model structure is ok'); $mo->generateModelClass('User'); require_once __DIR__ . '/storage/bases/BaseUser.php'; require_once __DIR__ . '/storage/classes/User.php'; $this->assertFileExists(self::$_storagePath . 'bases/BaseUser.php', 'BaseModel generated'); $this->assertFileExists(self::$_storagePath . 'classes/User.php', 'Model generated'); $this->assertTrue(class_exists('\\User'), 'Generated model class is available'); QC::executeSQL('DROP TABLE IF EXISTS users'); $mo->updateDBForModel('User'); $data = DBOperator::getInstance()->getTableStructure('users'); $this->assertNotEmpty($data, 'Table generation is ok'); }
public function onKernelReady(BaseEvent $event) { $this->onEnvironmentUpdate($event); if ($webRoot = DC::getProjectConfig('webRoot')) { DC::getEnvironment()->setWebRoot($webRoot); } $databaseConfig = DC::getDatabaseConfig(); $request = DC::getRouter()->getCurrentRequest(); if ($profiles = $databaseConfig->get('profiles')) { foreach ($profiles as $profileName => $profileInfo) { DatabaseService::configProfile($profileInfo, $profileName); } if (empty($request) || $request && !$request->isConsoleRequest()) { ModelOperator::getInstance(DC::getEnvironment()->getUserClassesRoot() . 'db/'); if ($databaseConfig->get('autoUpdateAll')) { ModelOperator::getInstance()->generateAllModelClasses()->updateDBForAllModels(); } } } }
protected static function putTestContent() { QC::executeSQL('DROP TABLE IF EXISTS products'); QC::executeSQL('DROP TABLE IF EXISTS categories'); $storagePath = __DIR__ . '/storage/'; $mo = ModelOperator::getInstance($storagePath); $mo->generateBasicStructure('Product'); $mo->generateBasicStructure('Category'); ModelStructure::getInstanceForModel('Product')->addColumn('id_category', array('type' => 'int(11) unsigned'))->addRelation('category')->addRelation('category_title', array('table' => 'categories', 'fields' => array('title'), 'use' => 'title', 'type' => 'many_to_one', 'local_field' => 'id_category'))->saveStructure(); ModelStructure::getInstanceForModel('Category')->addRelation('products')->saveStructure(); $mo->generateAllModelClasses(); require_once $storagePath . 'bases/BaseProduct.php'; require_once $storagePath . 'bases/BaseCategory.php'; require_once $storagePath . 'classes/Product.php'; require_once $storagePath . 'classes/Category.php'; $mo->updateDBForAllModels(); QC::create('products')->insert(array('title' => 'Macbook Air', 'id_category' => 1))->execute(); QC::create('products')->insert(array('title' => 'Macbook Pro', 'id_category' => 1))->execute(); QC::create('products')->insert(array('title' => 'iMac 27"', 'id_category' => 2))->execute(); QC::create('categories')->insert(array('title' => 'Notebooks'))->execute(); QC::create('categories')->insert(array('title' => 'Computers'))->execute(); $categoriesCollectionText = <<<TEXT <?php use Solve\\Database\\Models\\ModelCollection; class CategoriesCollection extends ModelCollection { public function getProductsCount() { return 12; } } TEXT; file_put_contents($storagePath . 'classes/CategoriesCollection.php', $categoriesCollectionText); require_once $storagePath . 'classes/CategoriesCollection.php'; }
public function saveStructure() { ModelOperator::getInstance()->setStructureForModel($this->_modelName, $this->_data->getArray()); ModelOperator::getInstance()->saveModelStructure($this->_modelName); $this->setupAddedAbilities(); ModelOperator::getInstance()->setStructureForModel($this->_modelName, $this->_data->getArray()); ModelOperator::getInstance()->saveModelStructure($this->_modelName); return $this; }