/** * @return int */ public function getCount() { if ($this->count === NULL) { $column = !$this->source->getPrimary(FALSE) ? '*' : $this->source->getPrimary(); $this->count = $this->source->count($column); } return $this->count; }
/** * Get count of data * @return int */ public function getCount() { try { $primary = $this->data_source->getPrimary(); } catch (\LogicException $e) { return $this->data_source->count('*'); } return $this->data_source->count($this->data_source->getName() . '.' . (is_array($primary) ? reset($primary) : $primary)); }
/** * @internal */ public function access($key, $cache = TRUE) { if ($this->table->getConnection()->getCache() && !isset($this->modified[$key]) && $this->table->access($key, $cache)) { $id = isset($this->data[$this->table->getPrimary()]) ? $this->data[$this->table->getPrimary()] : $this->data; $this->data = $this->table[$id]->data; } }
/** * Returns referencing rows. * @param string * @param string * @return GroupedSelection */ public function related($key, $throughColumn = NULL) { $groupedSelection = $this->table->getReferencingTable($key, $throughColumn, $this[$this->table->getPrimary()]); if (!$groupedSelection) { throw new Nette\MemberAccessException("No reference found for \${$this->table->name}->related({$key})."); } return $groupedSelection; }
/** * Returns referencing rows. * @param string * @param string * @return GroupedSelection */ public function related($key, $throughColumn = NULL) { if (strpos($key, '.') !== FALSE) { list($key, $throughColumn) = explode('.', $key); } elseif (!$throughColumn) { list($key, $throughColumn) = $this->table->getConnection()->getDatabaseReflection()->getHasManyReference($this->table->getName(), $key); } return $this->table->getReferencingTable($key, $throughColumn, $this[$this->table->getPrimary()]); }
/** * Updates row. * @param array|\Traversable (column => value) * @return bool */ public function update($data) { if ($data instanceof \Traversable) { $data = iterator_to_array($data); } $primary = $this->getPrimary(); if (!is_array($primary)) { $primary = [$this->table->getPrimary() => $primary]; } $selection = $this->table->createSelectionInstance()->wherePrimary($primary); if ($selection->update($data)) { if ($tmp = array_intersect_key($data, $primary)) { $selection = $this->table->createSelectionInstance()->wherePrimary($tmp + $primary); } $selection->select('*'); if (($row = $selection->fetch()) === FALSE) { throw new Nette\InvalidStateException('Database refetch failed; row does not exist!'); } $this->data = $row->data; return TRUE; } else { return FALSE; } }
/** * Deletes row. * * @return int number of affected rows or FALSE in case of an error */ public function delete() { return $this->table->getConnection()->table($this->table->getName())->where($this->table->getPrimary(), $this[$this->table->getPrimary()])->delete(); }
/** * @param bool * @return string|array|NULL * * @throws \LogicException */ public function getPrimary($need = TRUE) { return $this->selection->getPrimary($need); }