我正在尝试在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”)之类的魔术方法时,它可以工作......
你能看出问题所在吗?我真的不能,我只是想做一个简单的任务!
答案 0 :(得分:7)
您的位置模型的类名称应为Location
,而不是LocationModel
。
因此,CakePHP将为Locations数据库表生成一个“通用”模型,并使用该模型而不是您自己的模型。由于此通用模型不具有get()
方法,因此它将作为SQL语句执行get
,从而导致错误
此外,在模型中,您不应使用$this->Location->query();
,而只需使用$this->query();
答案 1 :(得分: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`
}
}