Nejste přihlášen(a)
Stránky: 1
Téma zavřeno
Vysvětlím:
příklad:
<?php
echo dibi::select("*")
->select("*")
->select(
dibi::select("*")
->select("*")
)
->select("*")
->from("table")
->select('table.id')
->leftJoin('table2')->on('foo=doo')
->select('table.name');
?>
<?php
/** @var array co k cemu patri */
public static $owners = array(
'JOIN' => 'FROM',
'LEFT JOIN' => 'FROM',
);
?>
vytvorili jsme ownera, a ve funkci __call
<?php
radek: 173
if (isset(self::$owners[$clause])) {
$this->cursor = & $this->clauses[self::$owners[$clause]];
}
?>
kontrolujeme jestli neznámá klauzule náhodou nepatří nějakému vlastníkovi, pak víme že se zařadí vždy do from
asi to není úplně ideální ale jinak to nejde
jde o to že třeba v šabloně použijete něco jako select(name, description) a obvykle šablona už ten fluent má, včetně from atd. tedy souslednost těch funkcí nelze dodržet
Přidal jsem to tam.
pro ty, kteří by si rádi tuto funcionalitu rádi přidali do svého aktuálního dibi, jde o soubor dibi/libs/DibiFluent.php
Ve fci __call po lazy inicializaci, tj. „if ($this->command === NULL) {…“ přidat:
<?php
// auto-switch to a clause
if (isset(self::$clauseSwitches[$clause])) {
$this->cursor = & $this->clauses[self::$clauseSwitches[$clause]];
}
?>
a v témž souboru přidat na začátku pod definicí „public static $separators = array(…“ následující:
<?php
/** @var array clauses */
public static $clauseSwitches = array(
'JOIN' => 'FROM',
'INNER JOIN' => 'FROM',
'LEFT JOIN' => 'FROM',
'RIGHT JOIN' => 'FROM',
);
?>