Explorer, formulář a nervy ;-)

grovik
Člen | 54
+
0
-

Mám zajímavou situaci.

Jednoduchý formulář pro přidání položky do DB a zároveň nastavení konkrétního uživatele k té dané položce.

 public function createComponentAddOblastForm(): Form
  {

	$data = $this->database->table('users');

	foreach($data as $row)
	{
		$selectUsers = [$row->user_id => $row->name];
	}

	bdump($selectUsers);
	$form = new Form;
		$form->addSelect('uzivatel', 'uzivatel',$selectUsers)
			 ->setPrompt('Uživatel...');



		$form->addText('oblast', 'Oblast:');


		$form->addSubmit('send', 'Přidat');

		$form->onSuccess[] = [$this, 'addOblastFormSucceeded'];
		return $form;

  }

Metoda vypadá takhle:

public function getUsersSelect()
	{

		return $this->database->table('users')->where('ban = 0')->order('name DESC');


	}

Problém je, že do SELECTU se vygeneruje jen jedno OPTION:

<form n:name="addOblastForm">
            <label for="oblast">Oblast:</label>
            <input type="text" n:name="oblast" required>
            <label for="uzivatel">Uživatel:</label>

            <select n:name="uzivatel">

            </select>

            <button class="btn btn-success"  n:name="send" type="submit">Přidat</button>
          </form>

Zkoušel jsem tam i jinou metodu, která je použita se stejnou šablonou a jinde vrací seznam uživatelů, ale jak jí použiju ve formuláři dostanu prostě buď jednoho nebo taky třeba žádného.

Nejsmutnější je, že podle Tracy se vygeneruje 6 záznamů.

Zkoušel jsem položky do selectu vkládat i takhle

{foreach $users as $userr}
   <option {if $locale->user_id == $userr->user_id}selected{/if}  value="{$userr->user_id}">{$userr->name}</option>
 {/foreach}

Což v šabloně o kus dál normálně funguje.
Už se s tím trápím dva dni a prostě nevím. Asi je někde něco špatně, ale já za boha nemůžu přijít na to co.

Pepino
Člen | 249
+
+2
-
$selectUsers = [];
foreach($data as $row)
{
	$selectUsers[$row->user_id] = $row->name;
}

Editoval Pepino (3. 7. 2023 13:06)

nightfish
Člen | 474
+
+2
-

@grovik
Lze využít schopnosti Database Exploreru vytvořit z výsledků rovnou pole, které potřebuješ pro addSelect():

$selectUsers = $this->database->table('users')->where('ban = 0')->order('name DESC')->fetchPairs('user_id', 'name');
grovik
Člen | 54
+
0
-

Tak díky za kopnutí :D.
Problém byl v tomto:

$selectUsers = [];

Jak jsem to přidal, začalo to fungovat. Jsem prostě deb… ;-). Díky pánové.
pak samozřejmě funguje i to generování přes Explorer, které jsem také zkusil a narazil na stejný výsledek.
Ještě jednou díky!