如何在CakePHP中创建自定义MySQL查询?

Joh*_* Au 6 php mysql controller cakephp model

我想在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的LocationModel.php:

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

    public $name = 'Location';

    public function get()
    {
        $this->Location->query("SELECT * FROM locations;");
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我只是尝试执行一个简单的查询,但它不起作用.我收到此错误:

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
Run Code Online (Sandbox Code Playgroud)

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

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

tha*_*tah 7

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

因此,CakePHP将为Locations数据库表生成一个"通用"模型,并使用该模型而不是您自己的模型.因为通用模型并不能有一个get()方法,它会执行get一个SQL语句,导致错误

此外,在模型中,您不应该使用$this->Location->query();,而是简单地使用$this->query();

  • @FranciscoCorrales**不是**如果你传递一个带有未转义变量的文字查询,但它**支持预备语句(参见源代码[here](https://github.com/cakephp/cakephp/blob/ 2.4.9/LIB /蛋糕/型号/ Model.php#L3297)).像这样使用它:`$ this-> query('SELECT*FROM foo WHERE id =?OR somefield =?',array(123,'foo'));` (7认同)