Převedení SQL řetězce na DibiFluent
- darthcz
- Člen | 113
Dobrý den,
chtěl bych se vás zeptat, zda někdo nevíte, jak v dibi převést klasický sql dotaz tak, aby byl převeden na dibifluent a dalo se s ním nadále podle toho pracovat?
Mám v databázi uložené sql řetězce, které potřebuji, aby byly
zpracovány griditem.
Dělám si obecně fungující model, abych nemusel pro každý datagrid dělat
zvláštní model.
Myslel jsem něco takovéhoto:
$db->command()->clause("Select * from gui_users")
Po bližším zkoumání jsem ale zjistil, že to takto nepůjde. Potřeboval bych tedy nějakou překladovou funkci, která by mi zajistila správný převod.
Za každou radu předem děkuji.
- Ot@s
- Backer | 476
Zjednoduši si to pomocí dočasného pohledu (koncept z hlavy):
$vname = 'tmp'.mt_rand(5, 15); // zajisteni unikatniho nazvu pohledu
$sql = 'Select * from gui_users'; // onen SQL z databaze
// premena SQL na dibi fluent
\dibi::query('create temporrary view '.$vname.' as '.$sql);
$df = \dibi::select(*)->from($vname);
// v $df je to co potrebujes
- darthcz
- Člen | 113
Takto to skutečně funguje. Níže trošku komplexnější příklad (v praxi nebude tenhle join použit).
Ještě bych se chtěl zeptat, jaký je rozdíl mezi create view a create temporary table? create temporary view nejde.
Děkuji moc.
public function __construct(\DibiConnection $db, $sql = null)
{
//get all rows from table
$vname = 'tmp'.mt_rand(5, 15); // zajisteni unikatniho nazvu pohledu
$sql = 'Select * from gui_users u'; // onen SQL z databaze
// premena SQL na dibi fluent
$db->query('create temporary table '.$vname.' as '.$sql);
parent::__construct($db->select('*')->from($vname)->join('gui_users_roles r')->on("r.user_id = $vname.id")->where("$vname.id = 3"));
}
- Ot@s
- Backer | 476
darthcz napsal(a):
Ještě bych se chtěl zeptat, jaký je rozdíl mezi create view a create temporary table? create temporary view nejde.
TEMPORARY pohled je dočasný, tj. je k dispozici po dobu připojení k databázi a pouze pro požadavek, který ho vytvořil (pak ho db server automaticky smaže). Např. postgresql ho podporuje. U mysql se na to musí malinko jinak.