ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid

marek-m
Člen | 66
+
+1
-

@PavelJanda v Ublaboo\DataGrid\Row vo funkcii getValue($key) uprav na riadku 92

} else if ($this->item instanceof DibiRow) {
			return $this->item->{$key};
}

return tak, aby key rozdelilo napr. z t.id na id – takto bude fungovat $grid->setPrimaryKey(‚t.id‘); pri joint selectoch, dik

raven
Člen | 1
+
0
-

Pod Nette24–20160731 dosávám hlášku: DataGrid is attached to: ‚App\AdminModule\Presenters\PostPresenter‘, but instance of PresenterComponent is needed.
Pod Nette2310 je to OK.
Nevím si už rady, poradíte prosím?
Když kód na kontrolu té instanceof zakomentuji, DataGrid normálně naběhne, ale to asi není ideální řešení.
Děkuji.

Post.list.latte

{control postListGrid}

PostPresenter.php

use App\AdminModule\Components\Grid;
class PostPresenter extends BasePresenter {
	...
	/** @var Grid\PostListGridFactory @inject */
	public $postListGrid;
	protected function createComponentPostListGrid($name) {
		$this->postListGrid->create($this, $name);
	}
	...
}

PostListGrid.php

class PostListGridFactory {
	...
	public function create($parentPresenter, $componentName) {
		$grid = new DataGrid($parentPresenter, $componentName);
		$grid->setDataSource([['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Joe']]);
		$grid->addColumnNumber('id', '#')->setSortable();
		$grid->addColumnText('name', 'jméno');
	}
}
Pavel Janda
Člen | 977
+
0
-

@marek-m Mohl bys prosím poslat PR, nebo založit issue? Díky moc!

iNviNho
Člen | 352
+
0
-

Chalani nenarazili ste niekedy na problém pri setSortableCallback($callback) na prvku, ktorý sa custom vypisuje bez reálnej existencie stlpca?

Kód:

<?php
->setSortable()
->setSortableCallback(function($fluent, $sort) use($fId) {
	$this->contactService->sortByFieldId($fluent, $fId, $sort[$fId]);
});
?>

Pri ajaxovom requeste na sort funguje všetko ako má. Do url sa vloží

http://URL?locale=sk&contactGrid-per_page=20&contactGrid-sort%5B3%5D=ASC

Akonáhle ja by som dajme tomu refreshol stránku, tak mi vyhodí doctrina QueryException, pretože to nerobí môj sortable callback, ale defaultný order by… Problém nastáva hlavne preto, lebo daný stlpec nie je reálny stlpec v DB a doctrina sa snaží zoradiť podľa neho …

Pavel Janda
Člen | 977
+
+1
-

@iNviNho Jakou používáš verzi? Mohl bys kdyžtak udělat sandbox-like příklad a poslat v zipu do issue? Díky!

iNviNho
Člen | 352
+
0
-

V composeríku mám:

"ublaboo/datagrid": "dev-master"

Podobná chyba sa riešila tu

Trápim sa ešte trocha a ked tak vytvorím issue :) Chyba pravdepodobne vzniká pri vykonávaní toho sortenia, kde by sa mal kód pozrieť, či nie je definovaný setSortableCallback a ak je, tak použiť jeho a nie defaultne nastavený sortable, lebo Doctrine mi vyhadzuje QueryException:

SELECT c
FROM ContactModule\Entities\Contact c
ORDER BY c.2 ASC

Avšak 2ka nie je stlpec, preto je tam custom callback aby na základe tej dvojky spravil fluent operáciu :(

Editoval iNviNho (5. 10. 2016 10:47)

ryu
Člen | 29
+
+2
-

Mám složitější filtry a zabírají dost místa na obrazovce, bylo by fajn, kdyby se daly skrývat (bootsrap collapsible) Co na to @PavelJanda?

CZechBoY
Člen | 3608
+
0
-

Mně by se zase líbily filtry klikací jak v MS Office Access atd. – kliknu na název sloupce nebo trychtýř vedle názvu a vyjede mi okno s filtrováním.
https://support.content.office.net/…f0c6ae79.gif

Pavel Janda
Člen | 977
+
+1
-

@CZechBoY Takovým způsobem schovávající se filtry se mi moc nelíbí. Většina lidí chce rychle něco najít, neřešit několik kliknutí jenom vyfiltrování stavu == 1.

@ryu S tímhle naopak souhlasím. Pokud jsou filtry prázdné, budou schované, pokud je již někde něco filtrováno, tak zůstane filtr vidět. Mohl bys založit issue? Nebo v lepším případě PR? :P

Hug0
Člen | 35
+
0
-

Ahoj,
po tomhle commitu se mi nedaří zobrazit filtry. Nefunguje mi to ani na jednoduchém příkladu:

<?php
	protected function createComponentDataGrid($name)
    {
        $grid = new DataGrid($this, $name);
        $grid->setDataSource($this->repo->createQueryBuilder('worklog'));

        $grid->addColumnDateTime('date', 'Date')
            ->setFormat('j.n.Y H:i:s')
            ->setFilterDate('date');
	}
?>

Když smažu podmínku:

<?php
	!empty($control->filters)
?>

tak je vše v pořádku. Dělám něco špatně?

Hug0
Člen | 35
+
0
-

Hug0 napsal(a):

Ahoj,
po tomhle commitu se mi nedaří zobrazit filtry. Nefunguje mi to ani na jednoduchém příkladu:

<?php
	protected function createComponentDataGrid($name)
    {
        $grid = new DataGrid($this, $name);
        $grid->setDataSource($this->repo->createQueryBuilder('worklog'));

        $grid->addColumnDateTime('date', 'Date')
            ->setFormat('j.n.Y H:i:s')
            ->setFilterDate('date');
	}
?>

Když smažu podmínku:

<?php
	!empty($control->filters)
?>

tak je vše v pořádku. Dělám něco špatně?

Myslím, že by tam mělo být

<?php
 !empty($filters)
?>

místo

<?php
 !empty($control->filters)
?>
Pavel Janda
Člen | 977
+
0
-

@Hug0 Jj, už je to pushnuté, díky za report. :) composer update.

Hug0
Člen | 35
+
0
-

Super, díky :)

pitr82
Člen | 121
+
0
-

@PavelJanda Ahoj,
jde nějak vyfiltrovat text jako doplněk( NOT LIKE)?
Standardně filtruje text OR (<column> LIKE „%foo%“) OR (<column> LIKE „%bar%“)

Pavel Janda
Člen | 977
+
0
-

@pitr82 Určitě jde, použij vlastní podmínku:

$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('name NOT LIKE %like', $value);
	});
iNviNho
Člen | 352
+
0
-

Ahojte chalani,

riešili ste už niekto ako pri small inline editaci zobraziť datepicker a úspešne zvoliť dátum?

<?php
$grid->addColumnDateTime("completeDate", "Dátum odovzdania")
->setEditableCallback(function($id, $value) {
})
->setEditableInputType("text", ["class" => "form-control datepicker"]);
?>

Po kliku sa mi zobrazí textové políčko a vysunie datepicker, ale akonáhle kliknem na dátum z datepickru, tak sa mi zatvorí textové pole :-\

Skúšal som čosi v JS, ale neúspešne :-\ Viete ma troška naviesť?

FTCP
Člen | 6
+
+1
-

Dobré den,
odpovím si sám na dotaz ohledně odebrání zobrazení všech položek „All“ z paginace, bo to v dokumentaci není.

$grid->setItemsPerPageList([10, 30, 50, 100],FALSE);

jinak, šlo by prosím přidat možnost nastavení lokalizace/jazyka datepickerů již při vytváření komponenty v presentru ? musím to obcházet přidáním attributy onReady

$("[data-provide='datepicker']").attr("data-date-language","cs");
Pavel Janda
Člen | 977
+
-1
-

@FTCP Můžeš poslat PR. :)

matoni555
Člen | 40
+
+1
-

Ahoj,
předně díky za skvělý datagrid. Implementoval jsem ho do svého projektu a pracuje se s ním skvěle.

Mám však dva dotazy:

  1. Proč je nutné, aby pro funkci skrývání sloupců bylo zapnuté setRememberState? Chci využívat skrývání sloupců, ale mám u gridů nastaveno $grid->setRememberState(FALSE); protože nechci, aby si gridy pamatovaly nastavení.
  2. Plánuje někdo funkci autocomplete u textových filtrů?

Díky

Editoval matoni555 (26. 10. 2016 19:32)

Pavel Janda
Člen | 977
+
-1
-

@matoni555 1, Asi jsi myslel $grid->setRememberState(FALSE);?
Chápu, zajímavý námět. Mohl bys založit issue? Dává to smysl implementovat. Teď jeto bráno celkově – buď bude datagrid používat session nebo ne. A v té session jsou všechny věci – filtry, sortyování, pagination, skrývání sloupců.

2, Neplánuji, protože mi to vedle toho realtime vyhledávání přijde zbytečné.. Výsledky vyhledávání vidíš stejně hned..

CZechBoY
Člen | 3608
+
+1
-

Realtime vyhledávání nad větší db asi nebude moc realtime :-)

Pavel Janda
Člen | 977
+
0
-

@CZechBoY Pokud má člověk větší db, bude pro našeptávání používat nějaké víc custom řešení, třeba elastic, což?

Ale pokud by to někdo využil, rád mergnu související PR. :)

Filip111
Člen | 244
+
0
-

Ahoj,
chtěl jsem grid vyzkoušet, ale po instalaci a zkoušení hned prvního příkladu dostávám výjimku:
Ublaboo\DataGrid\Exception\DataGridException
Session filter: Filter [params] not found

Kód:

public function createComponentSimpleGrid($name)
	{
		$grid = new DataGrid($this, $name);
		$grid->setDataSource(array(
			'0' => array('title' => 'asdasdasd', 'description' => 'adadqwdad')
		));
		$grid->addColumnText('name', 'Name');
	}

Je potřeba nějak iniciovat session nebo je problém jinde?
(Nette 2.4, datagrid 4.4, PHP 7)

Díky.

Pavel Janda
Člen | 977
+
0
-

@Filip111 Věřím, že hláška pochází z jiné instance komponenty.. Takovýhle příklad ale stejně nemůže fungovat. DataGrid potřebuje znát primární klíč, což je by-default id. To můžu napravit:

$grid = new DataGrid($this, $name);

$grid->setPrimaryKey('title');

//...

Teď však přidáváš sloupec s indexem name ($grid->addColumnText('name', 'Name');), ale v tom poli žádné name není.

Změním tedy $grid->addColumnText('name', 'Name'); na $grid->addColumnText('title', 'Title');. Teď grid funguje v pohodě.

Editoval Pavel Janda (25. 10. 2016 10:33)

Filip111
Člen | 244
+
+1
-

@Pavel Janda:
Rozdílným názvem sloupců gridu a sloupců datasource to nebylo – zkopíroval jsem do fóra nějakou blbost (zkoušel jsem primárně Doctrine datasource a nakonec zjednodušoval, sloupce jsem měl správně).

Ale, tvoje zmínka o jiné instanci pomohla.
Dokud jsem volal {control grid} tak to nešlo, až když jsem ho přejmenoval na např. {control necoGrid}, tak se to chytlo. Sice nechápu, kde se bere komponenta s názvem grid (v configu není, v presenterech taky ne), ale už to funguje.

Díky.

libik
Člen | 96
+
0
-

Ahoj,

zkousim tento datagrid s Doctrine2. Mam tabulku (135 MiB, 274459 zaznamu, 56 sloupcu) a pokud si nactu celou entitu, strankovani je silene pomale: Queries: 3 , time: 9015.516 m

Entitu chci celou a vyuzil bych setDefaultHide() a nechal na userovi, co si zobrazi.

Je nejaka moznost jak to zrychlit? Tusim, ze problem bude spis na strane MySQL. Jedine co me napada, je entitu nenacitat celou, ale vybrat jen nektere sloupce explicitne, coz se mi nechce. Navic vyberu-li jich vic jak polovinu, uz ten cas zase leti nahoru.

Diky.

JardaH
Člen | 5
+
+1
-

Ahoj,
především díky za skvělý datagrid. Mám jen dva dotazy.
Mám sloupce cena, množství a celková cena. Na sloupci množství je nastavený setEditableCallback.
Kliknu na množství, změním, přes collback zapíši do databáze, ok
Teď dotaz:

  1. V callbacku je pouze hodnota primárního klíče a nové množství. Dá se nějak dostat k hodnotě sloupce „cena“?
  2. V řádku se mi překreslí nově zadané množství. Já ale v databázi měním i „celkovou cenu“, ta se nepřekreslí. Je možné překreslit celý řádek?

Nechci používat velkou editaci s ikonkami ke změně jedné položky. Datasource je dibifluent.

Díky

Pavel Janda
Člen | 977
+
+2
-

@JardaH Ahoj,

1, V tom callbacku nikde další data nedostaneš, ale můžeš si je ze svého modelu vytáhnout, když znáš primární klíč. Stačí tak?

2, Můžeš na datagridem zavolat po editaci DataGrid::redrawItem($id). To překreslí editovaný (a nebo jiný, záleží na $id) řádek. :) Akorát přijdeš asi o tu zelenou animaci, protože se překreslí novým řádkem.

JardaH
Člen | 5
+
0
-

Ahoj
Díky za rychlou odpověď. K těm datům se dostanu.
Překreslení potřebuji více rozvést. Není mi jasné jak se v tom callbacku dostanu k datagridu. Stačí funkci předat pouze hodnotu primárního klíče daného řádku? Můžeš mi napsat nějaký příklad?
Díky

libik
Člen | 96
+
0
-

Jeste to zkoumam a neni mi jasne proc mysql dotazy paginatoru ve vsech dotazech obsahuji vsechny vlastnosti Entity. Nestacilo by to jen u 3. dotazu, ktery vybira uz konkretnich x zaznamu pro zobrazeni v tabulce?

Pro celkovy pocet (trva cca 4s)

SELECT COUNT(*) AS dctrn_count
FROM (
SELECT DISTINCT id_0
FROM (
SELECT c0_.id AS id_0, c0_.surname AS surname_1, c0_.name AS name_2,
...
c0_.call AS call_55
FROM customer c0_) dctrn_result) dctrn_table

Pro zjisteni ID dle offset a limit (trva cca 4s):

SELECT DISTINCT id_0
FROM (
SELECT c0_.id AS id_0, c0_.surname AS surname_1,
....
c0_.call AS call_55
FROM customer c0_) dctrn_result
ORDER BY id_0 DESC
LIMIT 10
OFFSET 0

A finalni vyber dat (trva 9ms):

SELECT c0_.id AS id_0, c0_.surname AS surname_1
...
c0_.call AS call_55
FROM customer c0_
WHERE c0_.id IN (317030, 317029, 317028, 317027, 317026, 317025, 317024, 317023, 317021, 317020)
ORDER BY c0_.id DESC

Kdyz u prvnich dvou dotazu vnoreny select zkratim na

SELECT c0_.id AS id_0

Tak to leti v radu ms…

Nebo mi neco unika (coz je mozne :)?

EDIT: Ted uz nemam vic casu, ale… neseknul by se pak na tom filtr? Ale to by se dalo vyresit uvedenim jen tech poli, ktere bude obsahovat where, ne?

Editoval libik (27. 10. 2016 11:34)

JardaH
Člen | 5
+
0
-

@Pavel Janda Ahoj,
překreslení řádku už mi funguje. Díky moc za radu.
Děkuji

ondrusu
Člen | 118
+
0
-

Ahojte, tento datagrid je super, objevil jsem jednu chybku. Zde na řádku 1501 v definici tlačítka by neměl být druhý parametr. Nette tam pak samo doplní „Odeslat“ a takhle to vypadá jak to je teď viz tento obrázek

Nemám moc zkušeností s vývojem open-source knihoven, že bych to opravil a commitnul…
Je moje teoreie správná? Mám Nette\Forms ve verzi 2.3 možná 2.4

Děkuji.

Editoval ondrusu (29. 10. 2016 16:11)

Pavel Janda
Člen | 977
+
0
-

@ondrusu Teorie i praxe je taková, že tlačítko je přes css by-default skryto. Ale je pravda, že se nikomu nic nestane, když to bude tak, jak říkáš. Dobrý nápad, upravím.

ondrusu
Člen | 118
+
0
-

Pavel Janda napsal(a):

@ondrusu Teorie i praxe je taková, že tlačítko je přes css by-default skryto. Ale je pravda, že se nikomu nic nestane, když to bude tak, jak říkáš. Dobrý nápad, upravím.

no a jak se jinak dá odesílat filter? To si na to mám napsat nějaký „automatic submit“ u každýho políčka?

Pavel Janda
Člen | 977
+
0
-

@ondrusu Automatický submit tam již je. Zkus prozkoumat docu: http://ublaboo.org/datagrid/?…

ondrusu
Člen | 118
+
0
-

jo já to prostuduju, ten „bower“ je něco jako composer že …

Ještě bych měl jeden dotaz. Mám dvě entity.
Řekněme články a kategorie. Každý článek má vyplněnou kategorii (idčko) a ta kategorie má název popis atd…
Chci v datagridu vypsat název kategorie, ale když v SQL dotazu zmíním tu kategorii tak to spadne na chybě.

[Semantical Error] line 0, col 69 near 'category,': Error: Invalid PathExpression. Must be a StateFieldPathExpression

A metoda, která vrací data.

public function getArticles() {
   $qb = $this->em->createQueryBuilder();
    $qb->select('arc.id, '
                    . 'arc.name, '
                    . 'arc.desc, '
                    . 'arc.category, '
                    . 'arc.last_time, '
                    . 'arc.last_date ')
            ->from(Articles::class, 'arc')
    return $qb->getQuery()->getScalarResult();

}

Nevěděl bys kde je chyba?? Nebo jak to mám vrátit v Doctrine aby to bylo správně?

Pavel Janda
Člen | 977
+
0
-

@ondrusu Hmm, to nevím, budeš muset zkusit někoho znalejšího Doctrine.

F.Vesely
Člen | 368
+
0
-

Musis dat join te kategorie a select jeji nazev. Neco jako $qb->join('arc.category', 'c') a v selectu misto ‚arc.category‘ dat ‚c.name‘.

Nicmene doporucuji do datagridu davat cely QueryBuilder.

ondrusu
Člen | 118
+
0
-

Hmm to je trošku škoda, že když to mám zjoinované přes entity že to také neumí přečíst.
A nebo jde to vypsat i jinak?
V dokumentaci je napsáno:

Doctrine (QueryBuilder)
Doctrine (Collection)
F.Vesely
Člen | 368
+
+1
-

Vse je v dokumentaci v sekci Data Source:

public function getArticles() {
	$qb = $this->em->createQueryBuilder();
   	$qb->from(Articles::class, 'arc');
   	return $qb;
}
$grid->setDataSource($this->articlesService->getArticles());

$grid->addColumnText('name', 'Name', 'name');
$grid->addColumnText('category_name', 'Category', 'category.name');
ondrusu
Člen | 118
+
0
-

F.Vesely napsal(a):

Vse je v dokumentaci v sekci Data Source:

public function getArticles() {
	$qb = $this->em->createQueryBuilder();
   	$qb->from(Articles::class, 'arc');
   	return $qb;
}
$grid->setDataSource($this->articlesService->getArticles());

$grid->addColumnText('name', 'Name', 'name');
$grid->addColumnText('category_name', 'Category', 'category.name');

jj díky já to vyzkouším

ondrusu
Člen | 118
+
0
-

Jo funguje, a ještě líp než jak sem to měl já. Paráda ted můžu předávat i

$item->getName()

Díky všem co mi poradily.
Ještě mám jednu otázku, to už je jen technická:
Můj projekt se snaží být OOP a snažim se psát i čistý kod atd.
Chci se zeptat kam dáváte třídy / metody s definici datagridu

public function getGridDefinition($presenter, $name) {
$grid = new DataGrid($presenter, $name);
        $grid->setTemplateFile(....latte);
        $grid->setDataSource($datasource);
        $grid->addColumnText('name', 'Name')->setFilterText();
return $grid;
}

Mám teď adresářovou strukturu modelů
model/facades
model/entities
model/services

myslíte že se to hodí do
model/component

Nebo je lepší název??
díky za pomoc.

libik
Člen | 96
+
0
-

Ahoj,

pokorne se pripominam s https://forum.nette.org/…any-datagrid?p=12 ;)

Lze u action pouzit neco jako setDisabled(), kde bych na zaklade danych podminek mohl tlacitko nezobrazit?

Pavel Janda
Člen | 977
+
0
-

@libik Ten link míří na jiné téma než disabled tlačítko…

Každopádně, je to možné, víz dokumentace: http://ublaboo.org/datagrid/row#… :)

libik
Člen | 96
+
0
-

Diky, to jsem prehledl :/

Disabled action byl 2. dotaz, link na tema plati a jsem zvedavy, zda v tomto smeru lze neco udelat.

Pavel Janda
Člen | 977
+
0
-

@libik Bohužel nepoužívám doctrinu, takže asi neporadím. Ale určitě jsou načítat properties entity lazy, ne?

jvitasek
Člen | 1
+
0
-

Ahoj, nenašel jsem, že by se to tady už řešilo, pokud ano, tak se omlouvám.

$grid->addColumnNumber('idobjednavka_voucher', 'Voucher')
    ->setRenderer(function($item){
        return $this->searchModel->getVoucherById($item->idobjednavka_voucher)->nazev;
    })->setFilterText();

Nicméně filtr samozřejmě hledá v IDčkách. Jak říct filtru, aby hledal ve vyrenderovaných textech? Jde to vůbec? Díky za info!

romiix.org
Člen | 343
+
0
-

jvitasek napsal(a):

Takto by to malo ísť: http://ublaboo.org/datagrid/filter

$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));
	});
Pavel Janda
Člen | 977
+
+1
-

@jvitasek Neboj se kouknout do kódu. :)

public function setFilterText($columns = NULL)
{
	# ...
}

Takže si jednak upravíš dotaz do DB a jednak si nastavíš, nad kterým sloupcem/sloupci se má vyhledávat. (Více sloupců: Column::setFilterText(['v.nazev', 'v.popis']), jeden sloupec: Column::setFilterText('v.nazev'))

matous.radek
Člen | 2
+
0
-

Použil jsem jako datasource ublaboo/datagrid-nette-database-data-source
Jak můžu přidat ItemsDetail?
Dělám to pomocí

$grid->setItemsDetail($detail = TRUE, $primary_where_column = $grid->getPrimaryKey());

Kdy jako datasource mám query ktere se sklada z 3 joinu. Mám ale problém s id. V query je více id ček. Když je přejmenuji přes Alias na p_id a nastavím $grid->setPrimaryKey(‚p_id‘); tak to nefunguje protože při kliknutí na detail se přída podle primaryKey where kde alias není znám.
Pokud zkusím nastavit PrimaryKey na ‚products.id‘ pres teckovou notaci tak to vypíše chybu Cannot read an undeclared column ‚products‘.
Jak tedy určit id pro primaryKey aby šel ItemDetail?

edit: Zde jsem osekal daný kod, když mám v query vice tabulek, nevím jak definovat primary key, bud to píše že id není jednoznačne, alias na sloupec to nezna, a tabulku taky ne. Stejný problém se projeví všude při praci s primarním klíčem(ne jen u itemsdetail) tedy např u callbacku pro statusColumn.

> public function createComponentProductsGrid()
> {
>     $grid = new DataGrid();
>     $query =
>         'SELECT p.id, b.id as b_id, p.name AS p_name, b.name AS b_name
>             FROM products AS p
>             LEFT JOIN brands AS b
>              ON p.brands_id = b.id';
>
>     $params = [];
>     $datasource = new NetteDatabaseDataSource($this->ndb, $query, $params);
>     $grid->setPrimaryKey('products.id');
>     $grid->setDataSource($datasource);
>     $grid->addColumnText('name', 'Název', 'p_name')->setSortable();
>     $grid->addColumnText('brandName', 'Značka', 'b_name')->setSortable();
>     $grid->setItemsDetail($detail = TRUE, $primary_where_column = $grid->getPrimaryKey());
>
>     return $grid;
> }

Díky za pomoc

Ahoj zdravím, chci poblahopřát ke skvělému datagridu.
Mám ale nicméně problém stejného rázu jako mistr Domki.

Existuje tedy nějaké řešení? Domkimu jsem psal, ale teď řešení nemá.
Používám PostgreSQL a DibiFluent.

Chybová hláška při

$grid->setPrimaryKey("kniha.id");

"Attempt to read missing column ‚kniha‘, did you mean ‚knihaid‘?

Problém však je, že samozřejmě nikde v dotazu nemám, že bych hledal sloupec kniha, nýbrž právě kniha.id.

Nastavit

$grid->setPrimaryKey("id");

samozřejmě nefunguje, kvůli kolizím id.

Editoval matous.radek (5. 11. 2016 9:24)