6

我正在尝试在 Cakephp 中创建自己的 MySQL 查询。

这是我的LocationsController.php

<?php
App::uses('Location', 'Model');
class LocationsController extends AppController
{
    public $helpers = array('Html', 'Form');
    function index()
    {
        $this->loadModel("Location");
        $this->Location->get();
    }
}

这是我的LocationModel.php

<?php
App::uses('AppModel', 'Model');
class LocationModel extends Model {

    public $name = 'Location';

    public function get()
    {
        $this->Location->query("SELECT * FROM locations;");
    }
}

如您所见,我只是想执行一个简单的查询,但它不起作用。我收到此错误:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error 
in your SQL syntax; check the manual that corresponds to your MySQL server 
version for the right syntax to use near 'get' at line 1

当我使用 find("all") 之类的魔术方法之一时,它可以工作...

你能看出问题所在吗?我真的不能,我只是想做一个简单的任务!

4

2 回答 2

7

您的 Location 模型的类名应该是Location,而不是LocationModel

因此,CakePHP 将为 Locations 数据库表生成一个“通用”模型,并使用该模型而不是您自己的模型。因为这个泛型模型没有方法get(),所以会作为SQL语句执行,get导致报错

此外,在模型内部,您不应该使用$this->Location->query();,而只是$this->query();

于 2013-03-02T13:10:01.633 回答
3

位置控制器应该是:

<?php
App::uses('Location', 'Model'); // Y do u need this?
class LocationsController extends AppController
{
    public $helpers = array('Html', 'Form');
    function index()
    {
        $this->loadModel("Location");
        $this->LocationModel->getLocations(); // I will strongly discourage using get()
    }
}

位置模型应该是:

<?php
App::uses('AppModel', 'Model');
class LocationModel extends Model {

    public $name = 'Location';

    public function getLocations() // Try to avoid naming a function as get()
    {
    /** Choose either of 2 lines below **/

        return $this->query("SELECT * FROM locations;"); // if table name is `locations`
        return $this->query("SELECT * FROM Location;"); // if table name is `Location` since your public name is `Location`
    }
}
于 2013-03-02T04:56:26.370 回答