$form->addSelect() – výběr kategorií z databáze a nastavení option disabled
- Melmen
- Člen | 132
Ahoj,
Mám tabulku categories(id, name, categories_id) categories_id je cizi klic
do categories.id :)
Pokud je categories_id nastaveno na NULL, je to hlavni kategorie.
Napriklad kategorie Filmy, ta ma subkategorie divx, hd atd… Neresim nekonecne
zanoreni, staci mi mit hlavni,a pod kategorii :)
No a ted uz si nevim rady, jak udelat to, aby se mi vypsali kategorie, ale aby
ty hlavni nesly vybrat? To znamena pokud je categories_id NULL, bude mit
nastaveno disabled na true.
Zatim to resim
$categories = $this->getModels()->categories->where('lang', $this->lang)->fetchPairs('id', 'name');
A pak klasicky ve formu
$form->addSelect( 'category', 'Kategorie')->setItems($categories)->setPrompt('Vyber kategorii:');
Tím se ale dají vybrat i hlavní kategorie..
Snad jsem to napsal pochopitelně.. mohl by mi někdo poradit? Díky
- Melmen
- Člen | 132
Odpovím si tedy sám, pokud by někdo řešil něco podobného :)
$model = $this->model->categories(); // Model na získání všech kategorií
foreach ($model as $value)
{
$parent = $value['categories_id']; //cií klíč do kategorií
if ( $parent !== NULL )
{
$categories[$value->cats['name']][$value['id']] = $value['name'];
}
}
//následně ve formu
$form->addSelect( 'category', 'Kategorie', $categories )->setPrompt('Vyber kategorii');
V $categories je pole:
array(2) {
Filmy => array(2) {
7 => "DivX / Xvid" (11)
9 => "HD" (20)
}
Hry => array(2) {
11 => "Akční" (7)
12 => "Strategické" (12)
}
}
- Hurass
- Člen | 114
Zdravím, nemůžu si pomoct, ale v jednom projektu mi to jde normálně a v druhém ne. Nedaří se mi přijít na to, čím to je. Chová se to, jako kdybych měl pojmenovanou jinak tabulku, ale tabulka se jmenuje categories
if ($parent !== NULL) {
$categories[$value->categories['Name']][$value['Id']] = $value['Name'];
}
Chybová hláška:
Cannot read an undeclared column "categories".
- Hurass
- Člen | 114
Myslím, že ano. Ještě tu jedna věc, která mě zaráží. Když to mám takto, vyvolá se mi ještě tento dotaz:
SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_NAME = 'categories'
Přitom v druhém projektu, kde vše funguje, se tento dotaz neprovádí.
- David Matějka
- Moderator | 6445
ten dotaz se provadi jen poprve, pak se to nacachuje
zkontroluj si ty klice.. a kdyztak sem ukaz strukturu databaze, dotaz atd.
- Hurass
- Člen | 114
CREATE TABLE IF NOT EXISTS `categories` (
`Id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(25) COLLATE utf8_czech_ci NOT NULL,
`Parent` tinyint(3) unsigned DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `Name_UNIQUE` (`Name`),
KEY `fk_Parent` (`Parent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=3 ;
ALTER TABLE `categories`
ADD CONSTRAINT `fk_categories_Parent` FOREIGN KEY (`Parent`) REFERENCES `categories` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
Dotaz se mi normálně naplní řádky z tabulky.
SELECT `Id`, `Name`, `Parent`
FROM `categories`
Editoval Hurass (14. 1. 2014 16:52)
- David Matějka
- Moderator | 6445
a ty potrebujes parent? nebo co? nazev cilove tabulky je dulezity pro pro to
many smer, tedy pro related atd. pro to one (tedy ref atd) je dulezity nazev
sloupecku – respektive jeho cast.
prejmenuj si sloupecek na Parent_id a pouzij $value->Parent