Ziskani ID z databaze podle jmena
- DanielWellington
- Člen | 17
muzete mi prosim rict, co je na tomhle zapisu spatne? Porad mi to vraci chybu ze non object… uz sem vyzkousel snad vsechno a porad to nefunguje…
function getIDByName($name){
return $this->getTable()->where("name", $name)->fetch()->id;
}
- DanielWellington
- Člen | 17
jj u jinych to funguje. Je napsany podle quickstartu
protected function getTable()
{
preg_match('#(\w+)Repository$#', get_class($this), $m);
return $this->connection->table(lcfirst($m[1]));
}
- DanielWellington
- Člen | 17
Coz v podstate nijak nemeni to co jsem mel predtim, jen to osetruje vyjimku pokud nemam jmeno, zejo?
Pokud je tohle tedy spravne, tak mam chybu v prezenteru.
mam ve formulari:
$form->addSelect('name', 'Jméno obchodu', $shops)
->setPrompt('Zvolte obchod');
$shops je seznam vsech obchodu, kt ziskavam z db. Do toho comboboxu se vypisou spravne, takze predpokladam ze je vse ok.
a pak ve zpracovani formulare si do ziskaneho pole z formulare jeste dodatecne ukladam id pomoci jiz zminene funkce takto:
$values['id'] = $this->shopRepository->getIDByName($values['name']);
nekde v prubehu teto operace dojde k chybe a $values[‚name‘] je prazdny. Ptz kdyz jsem si to zkousel zadat na tvrdo, vse fungovalo. Kdyz jsem misto addSelect mel addText a napsal jmeno na tvrdo, opet to fungovalo.
- honos
- Člen | 109
vvoody napsal(a):
function getIDByName($name){ $row = $this->getTable()->where("name", $name)->fetch(); if ($row) { return $row->id; } else { // $name v tabulke neexistuje, $row sa v tomto pripade rovna NULL } }
Zkus provest dodatečnou validaci zda se jedna o string
function getIDByName($name){
if(!is_string($name)){ // Jedna z možnosti je doplnit tyto tři řádky..
throw new InvalidArgumentException(...);
}
/**
* Nebo si dumpni promenou $name
*/
dump($name); // Takto, ať víš co předáváš.. Nevím jakou verzi NF používáš ale myslím ze ve V2.1 jíž tato funkce není :-\
$row = $this->getTable()->where("name", $name)->fetch();
if ($row) {
...
Nebo se vůbec podívej co máš v proměnné $shops
..