如何创建自定义的CakePHP的MySQL查询?(How to create custom MySQ

2019-07-20 20:17发布

我试图创造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

当我使用的魔术方法类似的发现(“全”),而不是一个,它的工作原理...

你能看到的问题是什么? 我真的不能和我只是试图做一个简单的任务!

Answer 1:

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

正因为如此,CakePHP就会生成该位置的数据库表中的“通用”模型,并用该模型,而不是你自己的模型。 因为通用模型具有get()方法,它会执行get的SQL语句,导致错误

此外,模型里面,你不应该使用$this->Location->query(); ,而只是$this->query();



Answer 2:

定位控制器应该是:

<?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`
    }
}


文章来源: How to create custom MySQL queries in CakePHP?