could not be convert to int

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

Ahoj, nevíte prosím někdo proč mi tato funkce vrátí číslo které není int ?

function choseMenu($id, $promenna) {

        $row = $this->connection->table('menunazev')->where('menu_idmenu.idnadrazen',$id)->where('jazyk_idjazyk',$this->language)->where('hodnota',$promenna)->fetch();

        return $row !== FALSE ? $row["idmenu"] : NULL;
    }

Když následně chci pracovat s výsledkem vrácené funkce hlásí mi to tuto chybu, přitom idmenu je v DB integer
Object of class Nette\Database\Table\ActiveRow could not be converted to int

Předem díky za odpověd

Šaman
Člen | 2666
+
0
-

Miri napsal(a):

Ahoj, nevíte prosím někdo proč mi tato funkce vrátí číslo které není int ?

Určitě ti tato funkce vrací objekt třídy Nette\Database\Table\ActiveRow? Dumpni si výsledek té funkce.

U ternálního operátoru se doporučují závorky kolem podmínky, ale zkoušel jsem to a v tomto tvaru mi to funguje. Takže by mě docela zajímal ten dump.
U práce s výsledkem dotazu pomocí NDb se většinou používá objektový přístup, ale i to by mělo fungovat.

Tvůj kód jsem si zkusil a funguje. Dumpuj a hledej, ale chyba bude asi jinde. Zkoušel jsem na Sandboxu Nette 2.0.12

Miri
Člen | 117
+
0
-

Tak tohle jsem si dumpnul:

Nette\Database\Table\ActiveRow(4) {
   table private => Nette\Database\Table\Selection(18) {
      connection protected => Nette\Database\Connection(6) {
         dsn private => ...
         driver private => Nette\Database\Drivers\MySqlDriver(1) { ... }
         preprocessor private => Nette\Database\SqlPreprocessor(6) { ... }
         databaseReflection private => Nette\Database\Reflection\DiscoveredReflection(5) { ... }
         cache private => Nette\Caching\Cache(4) { ... }
         onQuery => array(1) [ ... ]
      }
      cache protected => Nette\Caching\Cache(4) {
         storage private => Nette\Caching\Storages\FileStorage(4) { ... }
         namespace private => "Nette.Database.825c2d8651c1fc3eba90c589429b8450\x00" (48)
         key private => NULL
         data private => NULL
      }
      sqlBuilder protected => Nette\Database\Table\SqlBuilder(14) {
         driver private => Nette\Database\Drivers\MySqlDriver(1) { ... }
         driverName private => "mysql" (5)
         tableName protected => "menu" (4)
         databaseReflection protected => Nette\Database\Reflection\DiscoveredReflection(5) { ... }
         delimitedTable protected => "`menu`" (6)
         select protected => array(0)
         where protected => array(1) [ ... ]
         conditions protected => array(1) { ... }
         parameters protected => array(1) [ ... ]
         order protected => array(0)
         limit protected => NULL
         offset protected => NULL
         group protected => ""
         having protected => ""
      }
      name protected => "menu" (4)
      primary protected => "idmenu" (6)
      primarySequence protected => FALSE
      rows protected => array(1) {
         5 => Nette\Database\Table\ActiveRow(4) { *RECURSION* }
      }
      data protected => array(1) {
         5 => Nette\Database\Table\ActiveRow(4) { *RECURSION* }
      }
      dataRefreshed protected => FALSE
      referenced protected => array(0)
      referencing protected => array(0)
      referencingPrototype protected => array(0)
      aggregation protected => array(0)
      accessedColumns protected => array(1) {
         idmenu => TRUE
      }
      previousAccessedColumns protected => array(1) {
         idmenu => TRUE
      }
      observeCache protected => TRUE
      checkReferenced protected => FALSE
      keys protected => array(0)
   }
   data private => array(1) {
      idmenu => 5
   }
   dataRefreshed private => FALSE
   modified private => array(0)
}
Miri
Člen | 117
+
0
-

Stále nevím co s tím mám dělat, funkce se sice odešle, ale když chci vrácené idmenu porovnávat s nějakým číslem tak mi to hlasí onu chybu.

Miri
Člen | 117
+
0
-

Tak už vyřešeno, špatně jsem se odkazoval k proměnné. Správně takto:

return $row !== FALSE ? $row->menu->idmenu : NULL;