Exemplo n.º 1
0
 /**
  * @return string
  */
 public function getCapName()
 {
     return Tools::capitalize($this->name);
 }
Exemplo n.º 2
0
 /**
  * @param self[] $objects
  */
 public static function saveAll(array $objects)
 {
     if (count($objects) == 0) {
         return;
     }
     /** @var self $class */
     $class = '\\' . get_called_class();
     $table = $class::getTableName();
     $attributes = $objects[0]->getAttributes(new \ReflectionClass($objects[0]));
     $nbColumns = count($attributes);
     $nbTotalRows = count($objects);
     $rowsByInsert = 0;
     /* Building attribute => getter list */
     $attrGetter = array();
     $fields = '(';
     foreach ($attributes as $k => $v) {
         if ($k != 'id' || $v != 0) {
             $attrGetter[$k] = 'get' . Tools::capitalize($k);
             $fields .= $k . ', ';
         }
     }
     $fields = substr($fields, 0, -2) . ')';
     unset($attributes);
     /* Depending of how many columns we have to insert, we don't put the same rows number in a single query */
     if ($nbColumns > 0 && $nbColumns <= 4) {
         $rowsByInsert = 50;
     } else {
         if ($nbColumns <= 10) {
             $rowsByInsert = 10;
         } else {
             $rowsByInsert = 2;
         }
     }
     $rowsInPartialInsert = $nbTotalRows % $rowsByInsert;
     /* Constructing queries, one for a full insertion, one for remaining rows that cannont fill a full insert */
     $pdo = PDOS::getInstance();
     $sql = 'INSERT INTO ' . $table . ' ' . $fields . ' VALUES ';
     $sqlValues1 = '';
     $sqlValues2 = '';
     for ($i = 0; $i < $rowsByInsert; $i++) {
         $sqlValues1 .= '(';
         if ($i < $rowsInPartialInsert) {
             $sqlValues2 .= '(';
         }
         foreach ($attrGetter as $k => $v) {
             $sqlValues1 .= ':' . $k . '_' . $i . ', ';
             if ($i < $rowsInPartialInsert) {
                 $sqlValues2 .= ':' . $k . '_' . $i . ', ';
             }
         }
         $sqlValues1 = substr($sqlValues1, 0, -2) . '), ';
         if ($i < $rowsInPartialInsert) {
             $sqlValues2 = substr($sqlValues2, 0, -2) . '), ';
         }
     }
     $sqlValues1 = substr($sqlValues1, 0, -2);
     $sqlValues2 = substr($sqlValues2, 0, -2);
     $queryFull = $pdo->prepare($sql . $sqlValues1);
     if ($rowsInPartialInsert > 0) {
         $queryPartial = $pdo->prepare($sql . $sqlValues2);
     } else {
         $queryPartial = null;
     }
     /* Executing loop, filling values and executing queries */
     $nbFullInserts = (int) ($nbTotalRows / $rowsByInsert);
     $reflection = new \ReflectionClass(get_called_class());
     $pdo->beginTransaction();
     $i = 0;
     for ($j = 0; $j < $nbFullInserts; $j++) {
         for ($k = 0; $k < $rowsByInsert; $k++) {
             $object = $objects[$i];
             foreach ($attrGetter as $attr => $getter) {
                 $method = $reflection->getMethod($getter);
                 if ($method->isPrivate()) {
                     $property = $reflection->getProperty('_' . $attr);
                     $property->setAccessible(true);
                     $val = $property->getValue($object);
                     $property->setAccessible(false);
                 } else {
                     $val = $object->{$getter}();
                 }
                 $queryFull->bindValue(':' . $attr . '_' . $k, is_bool($val) ? $val ? 'true' : 'false' : $val);
             }
             $i++;
         }
         $queryFull->execute();
     }
     if ($rowsInPartialInsert > 0) {
         for ($k = 0; $k < $rowsInPartialInsert; $k++) {
             $object = $objects[$i];
             foreach ($attrGetter as $attr => $getter) {
                 $method = $reflection->getMethod($getter);
                 if ($method->isPrivate()) {
                     $property = $reflection->getProperty('_' . $attr);
                     $property->setAccessible(true);
                     $val = $property->getValue($object);
                     $property->setAccessible(false);
                 } else {
                     $val = $object->{$getter}();
                 }
                 $queryPartial->bindValue(':' . $attr . '_' . $k, is_bool($val) ? $val ? 'true' : 'false' : $val);
             }
             $i++;
         }
         $queryPartial->execute();
     }
     $pdo->commit();
 }
Exemplo n.º 3
0
 /**
  * @return string
  */
 public function getClassName()
 {
     return Tools::capitalize($this->name, 4);
 }
 /**
  * @return string
  */
 public function getReturnedClassName()
 {
     return Tools::capitalize(Tools::removeSFromTableName($this->returnType));
 }