Problem s praci s Nette\Database a volanim procedury

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
saimons
Člen | 293
+
0
-

Potreboval bych pracovat s takovouto strukturou aplikace, ale nedari se mi to timto zpusobem. Nevite jak by se to dalo poupravit?

Model

/**
 * Vrati data do kalendare konkretniho tymu
 * @return array
 */
public function getCalendar() {
    return $this->database->query('CALL kalendar(?)', $this->team->tym_id);;
}

/**
 * Vrati dny ve kterych tym obdrzel vyzvu na zápas
 * @return \Nette\Database\Table\Selection
 */
public function getVyzva() {
    $date = new \DateTime();
    return $this->database->table('utkani')->where('tymVyzyvany_id', $this->team->tym_id)->where('akceptovano = 0')->where('DATE(datumCas) > ?', $date->format('Y-m-d'));
}

Presenter:

foreach ($this->context->calendarCalendar->calendar AS $c) {
	$events = ...
}

foreach ($this->context->calendarCalendar->vyzva AS $v) {
	$events = ...
}

	$this->sendResponse(new JsonResponse($events));

Server mi vsak hlasi chybu:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
saimons
Člen | 293
+
0
-

Nikdo nevite jak tento problem odstranit?

jtousek
Člen | 951
+
0
-

Tohle funguje nebo ne?

	return $this->database->query('CALL kalendar(?)', $this->team->tym_id)->fetchAll();

Pokud ne, na kterém řádku to zhavaruje?

saimons
Člen | 293
+
0
-

To jsem zkousel, ale chovalo se to uplne stejne (chyba na dalsim pokusu neco cist z DB), jedine co mi pomohlo, ze jsem po prvnim foreachi pouzil closeCursor() na select s CALLem. Ale je to problem pokud bych to chtel vypisovat v template, musel bych pak udelat toto:

$vysledky = $this->database->query('CALL vysledky(?)', $kolo);
foreach ($vysledky AS $v) {
    $result[] = $v;
}
$vysledky->closeCursor();
return $result;

Editoval saimons (24. 5. 2012 17:39)