Ublaboo a filter oneToMany

Danny
Člen | 146
+
0
-

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
+
0
-

bump

Danny
Člen | 146
+
0
-

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);
			});