Ziskani ID z databaze podle jmena

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

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;
}
honos
Člen | 109
+
0
-
return $this->getTable()->where("name", $name)->fetch()->id;

Vraci ti $this->getTable() pripojeni na databazi?

Editoval honos (23. 1. 2014 18:41)

DanielWellington
Člen | 17
+
0
-

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]));
  }
vvoody
Člen | 910
+
0
-
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
	}
}
DanielWellington
Člen | 17
+
0
-

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.

Robyer
Člen | 74
+
0
-

Zkontroluj si v Debugbaru co ti to pokládá za dotaz do databáze.

vvoody
Člen | 910
+
0
-

Ukáž klikatelnú ladenku, z toho čo píšeš vôbec nie je jasné kde nastala chyba.

s4muel
Člen | 92
+
0
-

@DanielWellington:
$values['name'] obsahuje kluc/key pola $shops, takze ak mas $shops vytiahnute z databazy,
tak je velmi pravdepodobne, ze $values['name'] uz budes mat rovno to id, ktore chces.

honos
Člen | 109
+
0
-

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 ..