Skip to content

Instantly share code, notes, and snippets.

@andresgutierrez
Created June 9, 2015 20:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andresgutierrez/2a729903f4b189e3ce75 to your computer and use it in GitHub Desktop.
Save andresgutierrez/2a729903f4b189e3ce75 to your computer and use it in GitHub Desktop.
<?php
namespace Some;
use Phalcon\DI,
Phalcon\Db\Column,
Phalcon\Mvc\Model,
Phalcon\Events\Manager as EventsManager,
Phalcon\Db\Adapter\Pdo\MySQL as Connection,
Phalcon\Db\Dialect\MySQL as SqlDialect,
Phalcon\Mvc\Model\Manager as ModelsManager,
Phalcon\Mvc\Model\Metadata\Memory as ModelsMetaData;
$eventsManager = new EventsManager();
$di = new DI();
$dialect = new SqlDialect();
$dialect->registerCustomFunction('MATCH', function($dialect, $expression) {
return $dialect->getSqlExpression($expression['arguments'][0]) .
" REGEXP " .
$dialect->getSqlExpression($expression['arguments'][1]);
});
$dialect->registerCustomFunction('NOT_MATCH', function($dialect, $expression) {
return $dialect->getSqlExpression($expression['arguments'][0]) .
" NOT REGEXP " .
$dialect->getSqlExpression($expression['arguments'][1]);
});
$connection = new Connection(array(
"host" => "localhost",
"username" => "root",
"password" => "secret",
"dbname" => "phalcon_test",
"dialectClass" => $dialect
));
$connection->setEventsManager($eventsManager);
$eventsManager->attach('db',
function ($event, $connection) {
switch ($event->getType()) {
case 'beforeQuery':
echo $connection->getSqlStatement(), "\n";
break;
}
}
);
$modelsManager = new ModelsManager();
$modelsManager->setDi($di);
$di['db'] = $connection;
$di['modelsManager'] = $modelsManager;
$di['modelsMetadata'] = new ModelsMetadata();
class Robots extends Model
{
}
$phql = "SELECT * FROM Some\Robots WHERE MATCH(name, '^[A-Z]') OR NOT_MATCH(name, 'a')";
$robots = $modelsManager->executeQuery($phql);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment