Nemohu získat pole z DB exploreru (2.4)

xlastovi
Člen | 3
+
0
-

Ahoj,

luštil jsem, jak získat čisté pole z Nette DB vrstvy, ale neuspěl jsem. Získal jsem jen pole obsahující ActiveRow. Nakonec jsem dospěl k tomuto kódu, který funguje:

$items = ['' => ''];
$sel = $this->locality->getTable()->select('poznamka')->group('poznamka')->order('poznamka');
foreach ($sel as $value)
    $items[$value->poznamka] = $value->poznamka;
$form['poznamka'] = new Select2('Poznámka:', $items);

Neexistuje lepší a kratší řešení? Těchto polí mám ve vyhledávacím formuláři čtyři.

Kamil Valenta
Člen | 820
+
0
-
$selection->fetch()->toArray();

?

Případně pokud to má být pro select ve formu, tak jen fetchPairs()

Editoval kamil_v (7. 8. 2020 22:32)

fikusir
Člen | 27
+
0
-

Já to udělal takhle v 3.0

Model:


	public function getSapNumbers()
	{
		return $this->database->fetchPairs('SELECT SAP from RVGeneral');
	}

Presenter:

		$sap_numbers=$this->generalManager->getSapNumbers();

		$form->addSelect('sap', 'SAP:')
			->setItems($sap_numbers, false)
			->setDefaultValue($this->sap)
			->setPrompt('Zvolte SAP')
			->setRequired("Pole SAP je povinné");

Editoval fikusir (13. 8. 2020 12:57)

Krejcir6
Člen | 1
+
0
-

Ten tvůj kód by se dal zkrátit takto:

$items = $this->locality->getTable()->select('poznamka')->group('poznamka')->order('poznamka')->fetchPairs('poznamka','poznamka');
$form['poznamka'] = new Select2('Poznámka:', $items);
xlastovi
Člen | 3
+
0
-

Krejcir6 napsal(a):

Ten tvůj kód by se dal zkrátit takto:

$items = $this->locality->getTable()->select('poznamka')->group('poznamka')->order('poznamka')->fetchPairs('poznamka','poznamka');
$form['poznamka'] = new Select2('Poznámka:', $items);

Děkuji, je to tak. Jen potřebuji tu první prázdnou položku, ale to je detail, který vyřeším.

Později jsem zjistil, že v jiné situaci získám pole pomocí fetchPairs(null, ‚sloupec‘).

Mimochodem, teprve teď jsem při návštěvě fóra zaregistroval, že můj příspěvek má odpovědi. Nevšiml jsem si, že je potřeba se ručně přihlásit k odběru.