Nette database – ako ziskat nasledujúce id (auto-increment v mysql)
- Andurit
- Člen | 131
Ahojte,
potrebujem ziskat najblizsie ID, ktore databaza prideli dalšiemu riadku
v tabulke.
Po troche googlenia som narazil na nieco take:
SHOW TABLE STATUS LIKE 'table_name'
Pozeral som si nette dokumentaci k database selection (https://doc.nette.org/…ase/explorer) no nenašiel som tam nić priamo na nasledujúce ID.
Preto som sa to pokúsil urobit cez QUERY
Moj zdrojak:
const TABLE_NAME = 'person';
public function __construct(Context $database)
{
parent::__construct($database);
$this->setTable(self::TABLE_NAME);
}
{
$status = $this->table()->query('SHOW TABLE STATUS LIKE \'person\'');
return $status->Auto_increment;
}
chyba: Call to undefined method.
Vedel by mi niekto poradit ako ziskat nasledujuce ID z MySQL v nette?
Diky
Editoval Andurit (8. 6. 2016 15:00)
- GEpic
- Člen | 566
Jen informace – table()
je Nette\Database\Context ?
Jinak pokud nevíš, co dotaz vrací, tak si ho dumpni.
$status = $this->table()->query('SHOW TABLE STATUS FROM `DatabaseName` LIKE \'person\'');
Debugger::barDump($status);
Navíc tento dotaz nepůjde použít, pokud se před tímto dotazem
nepoužije dotaz USE <databaseName> (Nevím, jestli ho Nette volá,
či?)… takže zkus
specifikovat ('SHOW TABLE STATUS LIKE \'jmenoDatabaze.person\'')
Editoval GEpic (8. 6. 2016 15:16)
- Andurit
- Člen | 131
fpob napsal(a):
Chybí ti tam
fetch()
.Takhle by to mohlo fungovat:
$status = $this->table()->query('SHOW TABLE STATUS LIKE \'person\'')->fetch(); return $status->Auto_increment;
Vdaka za radu, bohuzial stale chyba:
Call to undefined method parent::query().
GEpic napsal(a):
Jen informace –
table()
je Nette\Database\Context ?Jinak pokud nevíš, co dotaz vrací, tak si ho dumpni.
$status = $this->table()->query('SHOW TABLE STATUS FROM `DatabaseName` LIKE \'person\''); Debugger::barDump($status);
Navíc tento dotaz nepůjde použít, pokud se před tímto dotazem nepoužije dotaz USE <databaseName> (Nevím, jestli ho Nette volá, či?)… takže zkus specifikovat
('SHOW TABLE STATUS LIKE \'jmenoDatabaze.person\'')
Vdaka aj tebe za reakciu, ohladom volania priamo nazvu databaze.tabulky skusil som ale bez zmeny. Vzdy rovnaka chyba.
Riadok Debugger::barDump($status); mi tak isto nevypisal nic (je mozne ze sa to ani nevykona nakolko to vyhori chvilku predtym)
Ohladom toho co je table a ako to volam:
V BasePresentri mam nieco take:
use Nette,
Nette\Database\Context,
Nette\Database\Table\Selection;
.
.
.
private $database;
private $connection;
public function __construct(Context $database) {
$this->database = $database;
}
public function setTable($table){
$this->connection = $this->database->table($table);
}
public function table() {
return $this->connection;
}
public function getDatabase(){
return $this->database;
}
Podla toho čo píše David Matějka som to teda skúšal zavolat aj nad getDatabase()
$database = $this->getDatabase();
return $database->query('SHOW TABLE STATUS LIKE \'person\'');
Ked si dam v tomto pripade debugger tak mi vypise toto(na riadku kde sa vysledok tejto funkcie pouziva):
Nette\Database\Context #6c30
connection private => Nette\Database\Connection #1ef9
reflection private => Nette\Database\Reflection\DiscoveredReflection #d9f3
connection protected => Nette\Database\Connection #1ef9
cache protected => Nette\Caching\Cache #44db
storage private => Nette\Caching\Storages\FileStorage #1173 { ... }
namespace private => "Nette.Database.87c111d81318f5fac1f32d50c9ddeb6e\x00" (48)
key private => NULL
data private => NULL
structure protected => array (3)
primary => array (14) [ ... ]
belongsTo => array (1) [ ... ]
hasMany => array (1) [ ... ]
loadedStructure protected => array (3)
primary => array (14) [ ... ]
belongsTo => array (1) [ ... ]
hasMany => array (1) [ ... ]
cacheStorage private => Nette\Caching\Storages\FileStorage #1173
dir private => "/var/www/clients/client0/web1/web/new/logic/temp/cache" (54)
useDirs private => TRUE
journal private => Nette\Caching\Storages\FileJournal #cf62
locks private => NULL
preprocessor private => NULL
Editoval Andurit (8. 6. 2016 15:31)
- David Matějka
- Moderator | 6445
query v Selection je protected, musis to volat nad Conext nebo Connection