How to run RAW SQL query in PhalconPHP

∥☆過路亽.° 提交于 2019-11-29 14:05:38

All I see is your SQL, do you want to show how you are trying to run it in phalcon?

One of the easy ways that you can run raw SQL without using models or metadata is to use a base adapter, in this example I will use PDO:

        $connection = new Phalcon\Db\Adapter\Pdo\Mysql(array(
              'host' => 'localhost',
              'username' => 'user',
              'password' => 'password',
              'dbname' => 'optional'
        ));

        $connection->connect();

        $sql = 'select * from database.table';

        $result_set = $connection->query($sql);
        $result_set->setFetchMode(Phalcon\Db::FETCH_ASSOC);
        $result_set = $result_set->fetchAll($result_set);

To run a raw sql on a controller:

$this->db->query("SELECT * FROM robots WHERE id > 0");

To run a raw sql on a model:

$this->getDi()->getShared('db')->query("SELECT * FROM robots WHERE id > 0");

From the documentation:

If Raw SQL queries are common in your application a generic method could be added to your model:

<?php

use Phalcon\Mvc\Model\Resultset\Simple as Resultset;

class Robots extends Phalcon\Mvc\Model
{
    public static function findByRawSql($conditions, $params=null)
    {
        // A raw SQL statement
        $sql = "SELECT * FROM robots WHERE $conditions";

        // Base model
        $robot = new Robots();

        // Execute the query
        return new Resultset(null, $robot, $robot->getReadConnection()->query($sql, $params));
    }
}  

basend on the answer of david.duncan, working edition :P (missing commas added + array print)

$con = new Phalcon\Db\Adapter\Pdo\Mysql(array(
        'host' => 'localhost',
        'username' => '',
        'password' => '',
        'dbname' => 'aDatabase'
    ));

    $con->connect();
    $sql = 'select * from aDatabase.aTable';
    $result = $con->query($sql);
    $result->setFetchMode(Phalcon\Db::FETCH_ASSOC);
    $result = $result->fetchAll($result);

    foreach($result as $one)
    {
        echo print_r($one) . '<br>';
    }
$sql = 'SELECT * from table'; 
$query = $this->modelsManager->createQuery( $sql);
$logs  = $query->execute(); 

for modelsManager you need to setup in your service (service.php)

$di->set('modelsManager', function() {
      return new Phalcon\Mvc\Model\Manager\ModelsManager();
});

you can use $this->db->query(...)->fetchAll(); example:

 $resultMaster = $this->db->query("SELECT users.personelcode, users.fullname, users.shift," .
        " users.unit,users.vahed,users.status,devices.id,devices.installedcity," .
        " archive.userid,archive.verifydate,archive.verifytime,archive.verifytype,archive.verifystate,archive.fromdevice," .
        " requests.fromuser,requests.kind,requests.status,requests.fromdate,requests.todate FROM personels as users" .
        " INNER JOIN devices ON users.unit = devices.installedcity INNER JOIN archive ON devices.id = archive.fromdevice" .
        " INNER JOIN requests ON requests.fromuser = users.personelcode WHERE archive.verifydate" .
        " BETWEEN '" . addslashes($startDate) . "' AND '" . addslashes($endDate) . "' AND users.unit = '" . addslashes($Office) . "' AND " .
        " archive.userid = users.idindvc AND users.vahed = '" . addslashes($Vahed) . "' ")->fetchAll();
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!