Ublaboo a filter oneToMany
- Danny
- Člen | 146
Zdravím používám ublaboo Datagrid a mám takovou databázovou strukturu. Tabulky:
Vehicle
- id
- name
Attribute
- vehicle_id
- key
- value
Vypisuji všechny vehicles do datagridu a potřeboval bych filtrovat i podle
tabulky attribute, pod key a value se vždycky skrývá něco jako:
key: Type
value: vertical
key: Max repair cost
value: XXXX kč
atd…
Pro filtrování podle typu(type) si udělám jednoduše addSelect takto
$grid->addColumnText('type', 'Typ')
->setRenderer(function($item) {
$nation = $item->related('attribute')->where('key', 'Type')->fetch();
return $nation->value;
})->setFilterSelect($this->attributeDao->getAll()->group('value')->where('key', 'Type')->fetchPairs('id', 'value'));
Tím docílím toho že se mi zobrazí korektní hodnota(typ) ke vehiclu a select box kde jsou všechny možností v databázi ,podle kterých lze filtrovat.
Jak ale docílím toho aby se mi správně filtroval všechny vehicles které mají typ XX (podle toho co zvolím ze selectu ve filtru)? Našel sem něco jako:
$grid->addFilterText('custom', 'Custom search:', 'name')
->setCondition(function($fluent, $value) {
/**
* The data source is here DibiFluent
* No matter what data source you are using,
* prepared data source will be passed as the first parameter of your callback function
*/
$fluent->where('id > ?', strlen($value));
});
Ale úplně nerozumím jak to použit. Děkuji :-)
Editoval Danny (25. 9. 2018 16:11)
- Danny
- Člen | 146
Nakonec jsem to vyřešil sám takto:
$grid->addColumnText('type', 'Type')
->setRenderer(function($item) {
// vypis konkretniho atributu
});
$grid->addFilterSelect('type', 'Custom search:', pole pro select [id, value])
->setCondition(function($fluent, $id) {
$row = $this->attributeDao->getById($id);
$fluent->where(':attribute.value = ?', $row->value);
});