Phalcon模型经理

时间:2014-07-08 23:10:56

标签: php phalcon

我正在尝试创建像

这样的查询
SELECT *
FROM course
where course.id IN(
    SELECT DISTINCT(course_id)
FROM course_timing tim
WHERE tim.date >= CURDATE()
    )

我已经设置了模型管理器

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

但是当我尝试使用

       $phql = "SELECT * FROM CourseTiming";
       $rows = $this->modelsManager->executeQuery($phql);

我正在

模型' CourseTiming'无法加载

或者有没有办法使用Model :: find etc

运行上述查询

1 个答案:

答案 0 :(得分:5)

PHQL在查询中使用模型类(而不是db表名),因此您应该创建CourseTiming模型以通过PHQL访问db表:

<?php

class CourseTiming extends Phalcon\Mvc\Model
{
    public $id;
    ....

    public function getSource()
    {
        return 'course_timing'; // name of db table here
    }
}

不要忘记在Phalcon加载器中注册模型目录:

$loader = new \Phalcon\Loader();
$loader->registerDirs(array(
    'pathToModelsDir',
    ...
));
$loader->register();

另一种方法是通过Phalcon PDO访问数据库(在这种情况下您不需要创建CourseTiming模型)。

的index.php:

$di->setShared('db', function() {
    $db = new Phalcon\Db\Adapter\Pdo\Mysql(array(
        'host'     => 'localhost',
        'username' => 'root',
        'password' => 'root',
        'dbname'   => 'my_db',
    ));
    return $db;
});

控制器:

$records = $this->db->fetchAll("SELECT * FROM course_timing", Phalcon\Db::FETCH_ASSOC);