Chyba v count() pri neexistujúcom zázname v Nette\Database\Selector
- dakota
- Člen | 148
Nette Framework 2.0-dev revizia d670a85 released on 2011–01–03
Ak v Nette\Database vypisujem napr. články a k nim počet komentárov
// výpis článkov
$articles = $db->table('article');
foreach ($articles->limit(20)->order('id DESC') as $article) {
echo 'Title: '.$article->title.'<br>';
echo 'Comment count: '.$article->related('comment')->count('id').'<br>';
}
// jeden článok
$article = $db->table('article')->get(1);
echo 'Title: '.$article->title.'<br>';
echo 'Comment count: '.$article->related('comment')->count('id').'<br>';
ak článok nemá žiadny komentár, tak to pri danom článku vyhadzuje notice a warning
PHP Notice: Undefined index: 1 in ...\libs\Nette\Nette\Database\Selector\GroupedTableSelection.php:97
PHP Warning: Invalid argument supplied for foreach() in ...\libs\Nette\Nette\Database\Selector\GroupedTableSelection.php:97
možná oprava v GroupedTableSelection.php riadok 97:
// doplnenie if(isset($aggregation[$this->active])) { ... }
if (isset($aggregation[$this->active])) {
foreach ($aggregation[$this->active] as $val) {
return $val;
}
}
Je možné upraviť count() tak, aby vratila 0
v prípade
neexistujúcich záznamov (v uvedenom príklade pri neexistujúcom
komentári)?
Edit: chyba sa prejavuje pri všetkých agregačných funkciách – max,
min, … , v prípade ktorých by to mohlo pri neexistujúcom zázname vrátiť
NULL, v prípade count 0
.
Editoval dakota (4. 1. 2011 16:47)
- dakota
- Člen | 148
Chcel by som pripomenúť túto chybu. V NotORM už bola opravená: https://github.com/…6e99598b85f7.
- dakota
- Člen | 148
Nette Framework 2.0-beta – f951eeb released on 2011–06–02
$article = $db->table('article')->get(1);
echo $article->related('comment')->count('*');
v prípade že článok nemá žiadny komentár tak to vyhodí notice a warning
PHP Notice: Undefined offset: 266 in ...\libs\Nette\Database\Table\GroupedSelection.php:103
PHP Warning: Invalid argument supplied for foreach() in ...\libs\Nette\Database\Table\GroupedSelection.php:103
možná oprava podľa opravy v NotORM https://github.com/…6e99598b85f7:
//GroupedTableSelection
// metóda aggregation - doplnený isset
if (isset($aggregation[$this->active])) {
foreach ($aggregation[$this->active] as $val) {
return $val;
}
}
// doplnená metóda count
public function count($column = "")
{
$return = parent::count($column);
return (isset($return) ? $return : 0);
}
- dakota
- Člen | 148
hrach napsal(a):
Opravu jsem na pulloval: https://github.com/…tte/pull/266
Dik, urýchlilo to opravu.