使用modelsManager执行时更改了phql

时间:2014-10-27 21:23:26

标签: phalcon

我是Phalcon的新手,想在我的WAMP服务器上创建一个PHP Web服务。我有一张名为" coreswings"在MySQL数据库中,它代表了大型建筑的核心和翅膀。共有五个字段:abbr, name, type, busyFrom, busyTo

按照http://docs.phalconphp.com/en/latest/reference/tutorial-rest.html上的教程,我可以将我的请求路由到我想要的功能,但是phql," SELECT * FROM coreswings",不起作用并返回致命错误

index.php
<?php
/*###########################################################################
########## Set up connection to be used by model CoresWings, start ##########
###########################################################################*/

// use Loader() to autoload the model
$loader = new \Phalcon\Loader();

$loader->registerDirs(array(__DIR__.'/models/'))->register();

$di = new \Phalcon\DI\FactoryDefault();

// set up the database service
$di->set('db', function(){
    return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
        "host" => "localhost",
        "username" => "user",
        "password" => "user_pw",
        "dbname" => "map"
    ));
});

// create and bind the DI to the application
$app = new \Phalcon\Mvc\Micro($di);

/*#########################################################################
########## Set up connection to be used by model CoresWings, end ##########
#########################################################################*/

/*#########################################################
########## create routes according to api, start ##########
#########################################################*/

// get all cores and wings
$app->get('/coresWings', function() use ($app){
    $phql = "SELECT * FROM coreswings";
    $coresWings = $app->modelsManager->executeQuery($phql);

    $data = array();
    foreach($coresWings as $coreWing){
        $data[] = array(
            'abbr' => $coreWing->abbr,
            'name' => $coreWing->name,
            'type' => $coreWing->type,
            'busyFrom' => $coreWing->busyFrom,
            'busyTo' => $coreWing->busyTo,
        );
    }

    echo json_encode($data);
});

// testing purpose
$app->get('/testing', function(){
    $data = array(
        'function' => 'tesing',
        'data' => '001'
    );

    echo json_encode($data);
});

/*#######################################################
########## create routes according to api, end ##########
#######################################################*/

$app->handle();

?>

当我访问网址http://localhost/FYP/001/api/coresWings时,会显示以下错误:

( ! ) Fatal error: Uncaught exception 'Phalcon\Mvc\Model\Exception' with message 'Table "cores_wings" doesn't exist on database when dumping meta-data for CoresWings' in D:\Program Files\wamp\www\FYP\001\api\index.php on line 39 ( ! ) Phalcon\Mvc\Model\Exception: Table "cores_wings" doesn't exist on database when dumping meta-data for CoresWings in D:\Program Files\wamp\www\FYP\001\api\index.php on line 39

当然,我没有名为&#34; cores_wings&#34;的表,但我的phql是"SELECT * FROM coreswings"。如果我做错了,请告诉我。非常感谢。

mysql> describe coreswings; +----------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+---------------------+------+-----+---------+-------+ | abbr | varchar(63) | NO | PRI | NULL | | | name | varchar(1024) | YES | | NULL | | | type | enum('core','wing') | NO | | NULL | | | busyFrom | time | YES | | NULL | | | busyTo | time | YES | | NULL | | +----------+---------------------+------+-----+---------+-------+

型号:CoresWings.php     

use Phalcon\Mvc\Model,
    Phalcon\Mvc\Model\Message,
    Phalcon\Mvc\Model\Validator\InclusionIn,
    Phalcon\Mvc\Model\Validator\Uniqueness;

class CoresWings extends Model{

    public function validation(){
        // building type must be "core" or "wing"
        $this->validate(new InclusionIn(
            array(
                "field" => "type",
                "domain" => array("core", "wing")
            )
        ));

        // building abbreviation must be unique
        $this->validate(new Uniqueness(
            array(
                "field" => "abbr",
                "message" => "Abbreviation of a building must be unique"
            )
        ));

        // check if any messages have been produced
        if($this->validationHasFailed()==true){
            return false;
        }
    }
}   

?>

2 个答案:

答案 0 :(得分:0)

您可以使用Phalcon\Mvc\Model::getSource()方法。它是带有手册的表名称地图。

答案 1 :(得分:0)

如果您想要最少的配置,那么您应该遵循一些PhalconPHP的约定。

其中一个是CamelCaseModel PhalconPHP使用camel_case表。

如果要为模型设置不同的表格,则应设置其来源:

class CoresWings extends Model{
    public function initialize() {
        $this->setSource('coreswings');
    }
}