Formulář, SetDefault z DB – model
- strejcz
- Člen | 1
Zdravím,
prosím o radu, řeším problém s výpisem dat z DB zpět do
formuláře.
Mám stránku s nastavením, jednotlivé dny, tabulku mám navrženou
DB:
Celé texty
id_day
day_name
open
day_open
day_pause_start
day_pause_end
day_closse
1
monday
1
08:00:00.000000
12:00:00.000000
13:00:00.000000
17:00:00.000000
2
tuesday
0
07:00:00.000000
12:00:00.000000
13:00:00.000000
17:00:00.000000
.
.
Presenter:
$form = new Form;
$form->addHidden('id_day');
$form->addCheckbox('monday', 'Pondělí')
->addCondition($form::EQUAL, TRUE)
->toggle('monday_open')
->toggle('monday_pause_start')
->toggle('monday_pause_end')
->toggle('monday_closse');
$form->addText('monday_open', 'Od: ')
->setOption('id', 'monday_open');
$form->addText('monday_pause_start', 'Polední pauza začátek: ')
->setOption('id', 'monday_pause_start');
$form->addText('monday_pause_end', 'Polední pauza konec: ')
->setOption('id', 'monday_pause_end');
$form->addText('monday_closse', 'Do: ')
->setOption('id', 'monday_closse');
/*
*
To samé i pro ostatní dny
*
*/
/* načte data z db */
$default = $this->SettingManager->getDays();
/* nastavý výchozí hodnoty z databaze do formuláře */
$form->setDefaults($default);
$form->addSubmit('send', 'Uložit');
$form->onSuccess[] = array($this, 'daysFormSucceeded');
return $form;
Model
Const
const
TABLE_OPTIONS = 'options',
COLUMN_ID = 'id',
COLUMN_NAME = 'name',
COLUMN_URL = 'url',
COLUMN_EMAIL = 'email',
COLUMN_TEL = 'tel',
COLUMN_LOGO = 'logo',
TABLE_DAYS = 'days',
COLUMN_ID_DAY = 'id_day',
COLUMN_DAY_NAME = 'day_name',
COLUMN_OPEN = 'open',
COLUMN_DAY_OPEN = 'day_open',
COLUMN_DAY_PAUSE_START = 'day_pause_start',
COLUMN_DAY_PAUSE_END = 'day_pause_end',
COLUMN_DAY_CLOSSE = 'day_closse';
1. Je možné mít v const takhle umístěné dvě tabulky?
Ukládání dat
$monday = array(
self::COLUMN_OPEN => $values['monday'],
self::COLUMN_DAY_OPEN => $values['monday_open'],
self::COLUMN_DAY_PAUSE_START => $values['monday_pause_start'],
self::COLUMN_DAY_PAUSE_END => $values['monday_pause_end'],
self::COLUMN_DAY_CLOSSE => $values['monday_closse'],
);
$this->database->table(self::TABLE_DAYS)->where(self::COLUMN_ID_DAY, 1)->update($monday);
/*
*
To samé i pro ostatní dny
*
*/
2. Tady se chci jenom zeptat zda jde kód nějakým způsobe zkrátit
Načtení dat
$results_mo = $this->database->table(self::TABLE_DAYS)
->select(self::COLUMN_ID_DAY)
->select(self::COLUMN_OPEN)
->select(self::COLUMN_DAY_OPEN)
->select(self::COLUMN_DAY_PAUSE_START)
->select(self::COLUMN_DAY_PAUSE_END)
->select(self::COLUMN_DAY_CLOSSE)
->where(self::COLUMN_ID_DAY, '1')
->fetch();
foreach ($results_mo as $result_mo) {
Debugger::barDump($result_mo);
return $result;
};
/*Mělo by to pokračovat pro další dny kde by se pak tyto výsledky spojilo do pole a vrátili hodnoty do presenteru*/
3. tady mám teď největší problém
- neustále mi vyskakuje laděnka: Undefined offset: 2 → proč? Googloval jsem a nějak mi nejde do hlavy co se mi to snaží říct…
- je tohle idealni řešení když to bude rozepsáno pro každý den?
- Potřebuji z tohohle dostat hodnoty, které bych mohl nastavit jako výchozí pro formulář v presenteru viz víše
- pokud přeskočím chybu offset pokračuje to chybou: DateInterval::__construct(): Unknown or bad format (PTHMS)
Budu velice vděčný za každou radu, odkaz či nasměrovní.
Editoval strejcz (14. 5. 2016 15:28)
- igor.pocta
- Člen | 100
Za sebe, snad se na mě ostatní nebudou zlobit :)
$results_mo = $this->database->table(self::TABLE_DAYS)
->select(self::COLUMN_ID_DAY)
->select(self::COLUMN_OPEN)
->select(self::COLUMN_DAY_OPEN)
->select(self::COLUMN_DAY_PAUSE_START)
->select(self::COLUMN_DAY_PAUSE_END)
->select(self::COLUMN_DAY_CLOSSE)
->where(self::COLUMN_ID_DAY, '1')
->fetch();
Když ty selecty vynecháš, tak si to zkrátíš podstatně. Jen v tom budeš mít navíc day_name, což by vadit nemuselo.
Záznam který získáš z databáze a chceš ho použít, by měl být pole, tak si tam přidej:
$default = $this->SettingManager->getDays();
$default = $default->toArray();
Ale pokud chceš použít tohle, musí se prvky formuláře jmenovat stejně (…), jako sloupce v databázové tabulce.
Formulář bych si udělal jako komponentu a den nastavil přes metodu. V tomhle mi hodně pomohlo video od Honzy – https://www.youtube.com/watch?…