tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

DibiObject::extensionMethod a DibiFluent

před 9 lety

gogloid
Člen | 5

DibiObject::extensionMethod nefunguje bohužel nad DibiFluent (které si definuje vlastní __call).

Můj problém je ten, že jsem si chtěl definovat vlastní metodu pro přidání klauzule where, ale parametry mám v poli a nechci porušovat fluent interface. Existuje nějaké elegantní řešení? Mě právě napadlo použít DibiObject::extensionMethod, jako:

<?php
dibiFluent::extensionMethod('DibiFluent::factory',
    create_function('$th,$conditions','return call_user_func_array(array($th,"where"), $conditions);')
);
?>

EDIT:
Pro tento konkrétní případ funguje použít při vytváření dotazu následující:

<?php
dibi::select(...)->__call('where', $conditions)
?>

ale za čisté řešení bych to nepokládal :-)

Poslední stabilní verze (1.2) a PHP 5.2.10.

Editoval gogloid (16. 4. 2010 18:29)

před 9 lety

David Grudl
Nette Core | 6806

Asi nejsnažší by bylo vytvořit potomka třídy DibiFluent.

A aby jej vracel i dibi::select(...) a pod, můžeš vytvořit potomka DibiConnection a přepsat metodu command().