public function testIfSqlIsnotNull() { /** * @var ModuleRepository */ $objectRepository = new ModuleRepository(); $objectRepository->setEntityManager($this->em); $objectRepository->setColumnMapper($this->columnMapper); $object = new EavColumns($this->em, $this->columnMapper, $this->module); $this->assertNotNull($object->getSql()); }
public function onUpdate(EavPersisterEvent $event) { $optionalData = $event->getOptionalData(); $moduleId = $event->getModule()->getId(); $tableName = '_flat_module_' . $moduleId; $container = $event->getContainer(); $module = $event->getModule(); if ($module->getGenerateFlat()) { $tableExists = $this->pdo->query('SELECT * FROM information_schema.tables WHERE table_name = "' . $tableName . '" LIMIT 1')->rowCount(); if (!$tableExists) { $this->flatternTable->generate($module, true); } $context = $event->getContainer()->getContext(); $containerId = $event->getContainer()->getId(); $contextId = $event->getContainer()->getContext()->getId(); $culture = $this->languageManager->getCulture(); /** @var $moduleRepository EavModuleRepository * */ $moduleRepository = $this->moduleRepository->getRepository($event->getModule())->setClass(new EavModuleRepository()); $containerSQL = $moduleRepository->findByForFlatById($container, $module, $context)->getSQL(); $containerRow = $moduleRepository->findByForFlatById($container, $module, $context)->getQuery()->getResult(); $countColumnsSQL = $this->pdo->query('SHOW COLUMNS FROM ' . $tableName); $countColumnsSQL->execute(); $columnsRes = $countColumnsSQL->fetchAll(); $diffColumn = array(); foreach ($columnsRes as $t) { $diffColumn[] = $t['Field']; } $columns = array_keys($containerRow[0]); if (count(array_diff($columns, $diffColumn)) > 0 || count(array_diff($diffColumn, $columns))) { $this->flatternTable->generate($module, true); } $sql = 'DELETE FROM ' . $tableName . ' WHERE container_id = :container_id AND context_id = :context_id AND module_id = :module_id'; $pdo = $this->pdo->prepare($sql); $pdo->bindParam('container_id', $containerId); $pdo->bindParam('context_id', $contextId); $pdo->bindParam('module_id', $moduleId); $pdo->execute(); $sql = 'INSERT INTO ' . $tableName . ' '; $sql .= ' (' . implode(', ', $columns) . ' )'; $sql .= $containerSQL; $pdo = $this->pdo->prepare($sql); $pdo->bindParam(':container_id', $containerId); $pdo->bindParam(':context_id', $contextId); $pdo->bindParam(':module_id', $moduleId); $pdo->execute(); } }
public function setUp() { parent::setUp(); $this->createModuleData(); $this->module = $this->em->getRepository('BigfishEavBundle:Module')->find(1); $this->columnMapper = $this->container->get('eav.column.mapper'); /** * @var ModuleRepository */ $objectRepository = new ModuleRepository(); $objectRepository->setEntityManager($this->em); $objectRepository->setColumnMapper($this->columnMapper); $objectRepository->getRepository($this->module); $this->queryBuilder = new QueryBuilder($objectRepository); }
/** * Fill table with EAV values. * * @param $name * * @throws \Doctrine\DBAL\DBALException */ public function fillTable($name) { $columnsToFill = array('container_id', 'context_id', 'module_id', 'resource_id', 'by_resource_id', 'sequence', 'deleted', 'display', 'expire_temporary_date', 'culture'); foreach ($this->eavColumns->getColumns() as $column) { if ($this->getTypeToColumn($column['column'])) { $columnsToFill[] = $column['identifier']; } } $query = $this->moduleRepository->getRepository($this->module)->setClass(new EavModuleRepository()); $moduleSQL = $query->findByModuleSql($this->module, $columnsToFill, true); $createSql = 'INSERT INTO `' . $name . '` (' . implode(', ', $columnsToFill) . ') ' . $moduleSQL; $pdo = $this->pdo->prepare($createSql); $pdo->bindValue(':module_id', $this->module->getId()); $pdo->execute(); }
/** * @param $method * @param $arguments */ public function __call($method, $arguments) { if (strpos($method, 'findBy') === false && strpos($method, 'findOne') === false) { throw new \InvalidArgumentException(sprintf('Method %s must follow code standards. Use findBy or findOne. For example: findOneAuthor', $method)); } if ($this->_class) { $this->_class->getRepository($this->_module); $this->_class->setInvokeColumns($this->getInvokeColumns()); $this->_class->setColumnMapper($this->getColumnMapper()); $this->_class->setEntityManager($this->getEntityManager()); $this->_class->setLanguageManager($this->getLanguageManager()); $this->_class->setContextManager($this->getContextManager()); $this->_class->setPivotResultChain($this->getPivotResultChain()); if (method_exists($this->_class, $method)) { return call_user_func_array(array($this->_class, $method), $arguments); } } throw new \InvalidArgumentException(sprintf('Method %s does not exists', $method)); }