/** * Generate new table and fill it with data. * * @param Module $module * @param bool $force * * @return Module */ public function generate(Module $module, $force = false) { $this->module = $module; $this->eavColumns->setModule($module); if (!$force) { $flatIsGenerated = $this->module->getFlatIsGenerated(); $generateFlat = $this->module->getGenerateFlat(); if (!empty($flatIsGenerated) || !$generateFlat) { return; } } $moduleId = $this->module->getId(); $tableName = '_flat_module_' . $moduleId; $this->createTable($tableName); $this->fillTable($tableName); $this->module->setFlatIsGenerated(new \DateTime('now')); $this->objectManager->persist($this->module); $this->objectManager->flush(); return $this->module; }
public function buildEavQuery(\Bigfish\Bundle\EavBundle\Entity\Module $module, $skipFlat = false) { if ($module && $module->getFlatIsGenerated() && $module->getGenerateFlat() && !$skipFlat) { return '_flat_module_' . $module->getId(); } $unions = array(); $languages = $this->languageManager->getLanguages(); foreach ($languages as $lang) { $qb = $this->createQueryBuilder(); $qb->addSelect('_container.*'); $qb->addSelect('"' . $lang . '" as culture'); $qb->addSelect($this->getInvokeColumns()->setModule($module)->setLanguage($lang)->getSql()); $qb->from('eav_container', EavTables::CONTAINER_PREFIX); if ($module) { $qb->where($qb->expr()->eq(EavTables::CONTAINER_PREFIX . '.module_id', ':module_id')); } $unions[] = $qb->getSQL(); } if (count($unions) > 0) { $sql = implode(' UNION ', $unions); return '( ' . $sql . ' ) '; } else { return; } }