Získání hlaviček sloupců pomocí getColumns
- Miami
- Člen | 2
Ahoj, začínám s NETTE a potřeboval bych vědět, jak získám z databáze hlavičky sloupců.
Zkoušel jsem to pomocí funkce, kterou jsem vytvořil
<?php
public function showColumns()
{
$columns = $this->database->getSupplementalDriver()->getColumns('pozice');
Nette\Debugger::dump($columns);
}
?>
A následně je chci vypsat do selectu
<?php
$form->addSelect('pozice', 'Pracovní pozice:', $columns)
->setPrompt('Zvolte pozici');
?>
Ale hází mi to Undefined variable: columns.
Nevím si už rady
- Mysteria
- Člen | 797
Co je nejasného na tom, že chceš použít nenadefinovanou proměnnou? Nemělo by to být spíš nějak takhle?
public function showColumns() {
return $this->database->getSupplementalDriver()->getColumns('pozice');
}
$form->addSelect('pozice', 'Pracovní pozice:', $this->showColumns())->setPrompt('Zvolte pozici');
Samozřejmě jenom typuju, protože jsi nedal celé třídy, pokud máš tu funkci showColumns() někde v modelu, tak pak musíš samozřejmě upravit $this->showColumns().
Btw jsi si jistý, že chceš skutečně názvy sloupců (tzn. máš jednotlivé názvy pozic udělané v databázi jako sloupce tabulky)?
- Miami
- Člen | 2
Ahoj, díky za odpověď.
Mám to takhle:
<?php
class PostPresenter extends BasePresenter
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderShow($id_uziv)
{
$post = $this->database->table('uzivatele')->get($id_uziv);
if (!$post) {
$this->error('Stránka nebyla nalezena');
}
$this->template->post = $post;
}
**public function showColumns() {
$hlavicky = $this->database->getSupplementalDriver()->getColumns('uzivatele');
return explode("','",substr($hlavicky,6, -2));
}**
protected function createComponentUzivatelForm()
{
$form = new Form;
$form->addText('jmeno', 'Jméno:')
->setRequired('Nejsou vyplněna všechna pole');
$form->addText('prijmeni', 'Příjmení:')
->setRequired('Nejsou vyplněna všechna pole');
$form->addText('email', 'E-mail:')
->setRequired('Nejsou vyplněna všechna pole');
$form->addText('telefon', 'Telefon:')
->addRule(Form::MIN_LENGTH, 'Zadejte telefon ve tvaru +420xxxxxxxxx',13);
$form->addText('ulice', 'Ulice:')
->setRequired('Nejsou vyplněna všechna pole');
$form->addText('mesto', 'Město:')
->setRequired('Nejsou vyplněna všechna pole');
$form->addText('psc', 'PSČ:')
->addRule(Form::PATTERN, 'PSČ musí mít 5 číslic', '([0-9]\s*){5}');
**$form->addSelect('pozice', 'Pracovní pozice:', $this->showColumns())->setPrompt('Zvolte pozici');**
$form->addSelect('smena', 'Směna:')
->setPrompt('Zvolte směnu');
$form->addSubmit('send', 'Uložit');
$form->onSuccess[] = array($this, 'postFormSucceeded');
return $form;
}
public function postFormSucceeded($form, $values)
{
$postId = $this->getParameter('postId');
if ($postId) {
$post = $this->database->table('uzivatele')->get($postId);
$post->update($values);
} else {
$post = $this->database->table('uzivatele')->insert($values);
}
$this->flashMessage("Hotovo.", 'success');
$this->redirect('Homepage:');
}
public function actionEdit($postId)
{
$post = $this->database->table('uzivatele')->get($postId);
if (!$post) {
$this->error('Uživatel nenalezen!');
}
$this['uzivatelForm']->setDefaults($post->toArray());
}
public function actionDelete($id) {
$post = $this->database->table('uzivatele')->where('id',$id)->delete();
$this->flashMessage("Smazáno.", 'success');
$this->redirect('Homepage:');
}
}
?>
Každopádně chci tuto funkci využít pro načtení údajů z databáze, kde mám v tabulce pozice vypsané pomocí enum. Ty chci právě získat do selectu.
V php jsem dělal
<?php
$sql="SHOW COLUMNS FROM jmeno_tabulky LIKE 'jmeno_sloupce'";
if ($vysledek=mysql_query ("$sql") ) {
$text=mysql_result ($vysledek, 0, "Type");
} else {
echo mysql_error();
}
$pole= explode ("','",substr($text,6, -2));
?>
- David Matějka
- Moderator | 6445
getColumns vraci pole s metadaty, ne retezec, takze to nemuzes poslat do substr a explode