Как создать пользовательские запросы MySQL в CakePHP?

Я пытаюсь создать свои собственные MySQL-запросы в Cakephp.

Это мой 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»), он работает …

Вы видите, в чем проблема? Я действительно не могу, и я только пытаюсь сделать простую задачу!

Имя класса вашей модели местоположения должно быть « Location , а не « LocationModel .

Из-за этого CakePHP будет генерировать «общую» модель для таблицы базы данных Locations и использовать эту модель вместо вашей собственной модели. Поскольку эта обобщенная модель не имеет метода get() , она будет выполнять get как оператор SQL, вызывая ошибку

Кроме того, внутри модели вы не должны использовать $this->Location->query(); , но просто $this->query();

Контроллер местоположения должен быть:

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