예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 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;
     }
 }