Získání hlaviček sloupců pomocí getColumns

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

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
+
0
-

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
+
0
-

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));

?>
Mysteria
Člen | 797
+
0
-

To vypadá dobře, co je s tím teď za problém? Jestli kód projde a nemáš jenom jenom data v tom selectboxu, tak si dumpni, co ti vrací ta funkce showColumns().

David Matějka
Moderator | 6445
+
0
-

getColumns vraci pole s metadaty, ne retezec, takze to nemuzes poslat do substr a explode