public function getAllForTeacher($uzatvorene = FALSE) { $user = $this->user; $zadania = $this->db->fetchAll("SELECT z.id, z.nazov, z.cas_uzatvorenia, t.rocnik, t.kod, z.trieda_id, p.skratka AS predmet FROM zadania AS z " . "LEFT JOIN predmety AS p ON z.predmet_id = p.id " . "LEFT JOIN triedy AS t ON z.trieda_id = t.id " . "WHERE z.pouzivatel_id = ? AND ( z.stav = ? OR ( z.stav = 1 AND NOW() " . ($uzatvorene ? '>' : '<=') . " z.cas_uzatvorenia ) ) " . "ORDER BY z.cas_uzatvorenia DESC", array($user['id'], $uzatvorene ? 0 : 2)); if (empty($zadania)) { return array(); } $triedyIds = array_map(function ($v) { return (int) $v['trieda_id']; }, $zadania); $zadaniaIds = array_map(function ($v) { return (int) $v['id']; }, $zadania); // pocet ludi v triede $stmt = $this->db->executeQuery("SELECT trieda_id, COUNT(*) AS pocet_ziakov FROM pouzivatelia WHERE trieda_id IN(?) GROUP BY trieda_id", array($triedyIds), array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)); $triedy = $stmt->fetchAll(PDO::FETCH_ASSOC); $triedy = array_combine(array_map(function ($v) { return (int) $v['trieda_id']; }, $triedy), $triedy); // pocet odovzdanych k zadaniu $stmt = $this->db->executeQuery("SELECT zadanie_id, trieda_id, COUNT(*) AS pocet_ziakov FROM odovzdania AS o\n LEFT JOIN zadania AS z ON o.zadanie_id = z.id\n WHERE z.trieda_id IN(?) AND o.zadanie_id IN(?) GROUP BY o.zadanie_id", array($triedyIds, $zadaniaIds), array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY)); $odovzdania = $stmt->fetchAll(PDO::FETCH_ASSOC); $odovzdania = array_combine(array_map(function ($v) { return (int) $v['zadanie_id']; }, $odovzdania), $odovzdania); foreach ($zadania as &$zadanie) { $zadanie['odovzdanych'] = (isset($odovzdania[$zadanie['id']]['pocet_ziakov']) ? $odovzdania[$zadanie['id']]['pocet_ziakov'] : 0) . '/' . $triedy[$zadanie['trieda_id']]['pocet_ziakov']; } return $zadania; }
/** * Loads a collection of entities of a many-to-many association. * * @param ManyToManyMapping $assoc * @param array $criteria * @param PersistentCollection $coll The collection to fill. */ public function loadManyToManyCollection($assoc, array $criteria, PersistentCollection $coll) { $sql = $this->_getSelectManyToManyEntityCollectionSQL($assoc, $criteria); $params = array_values($criteria); $stmt = $this->_conn->executeQuery($sql, $params); while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { $coll->hydrateAdd($this->_createEntity($result)); } $stmt->closeCursor(); }
/** * Loads a collection of entities in a one-to-many association. * * @param OneToManyMapping $assoc * @param array $criteria The criteria by which to select the entities. * @param PersistentCollection The collection to load/fill. */ public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentCollection $coll) { $criteria = array(); $owningAssoc = $this->_class->associationMappings[$assoc['mappedBy']]; $sourceClass = $this->_em->getClassMetadata($assoc['sourceEntity']); foreach ($owningAssoc['targetToSourceKeyColumns'] as $sourceKeyColumn => $targetKeyColumn) { $criteria[$targetKeyColumn] = $sourceClass->reflFields[$sourceClass->fieldNames[$sourceKeyColumn]]->getValue($sourceEntity); } $sql = $this->_getSelectEntitiesSQL($criteria, $assoc); $params = array_values($criteria); $stmt = $this->_conn->executeQuery($sql, $params); while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { $coll->hydrateAdd($this->_createEntity($result)); } $stmt->closeCursor(); }
/** * Build criteria and execute SQL statement to fetch the one to many entities from. * * @param array $assoc * @param object $sourceEntity * @param int|null $offset * @param int|null $limit * @return Doctrine\DBAL\Statement */ private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = null, $limit = null) { $criteria = array(); $owningAssoc = $this->_class->associationMappings[$assoc['mappedBy']]; $sourceClass = $this->_em->getClassMetadata($assoc['sourceEntity']); foreach ($owningAssoc['targetToSourceKeyColumns'] as $sourceKeyColumn => $targetKeyColumn) { if ($sourceClass->containsForeignIdentifier) { $field = $sourceClass->getFieldForColumn($sourceKeyColumn); $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); if (isset($sourceClass->associationMappings[$field])) { $value = $this->_em->getUnitOfWork()->getEntityIdentifier($value); $value = $value[$this->_em->getClassMetadata($assoc['targetEntity'])->identifier[0]]; } $criteria[$targetKeyColumn] = $value; } else { $criteria[$targetKeyColumn] = $sourceClass->reflFields[$sourceClass->fieldNames[$sourceKeyColumn]]->getValue($sourceEntity); } } $sql = $this->_getSelectEntitiesSQL($criteria, $assoc, 0, $limit, $offset); list($params, $types) = $this->expandParameters($criteria); return $this->_conn->executeQuery($sql, $params, $types); }