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") のような魔法のメソッドの 1 つを使用すると、機能します...

何が問題か分かりますか?私は本当にできません。単純なタスクを実行しようとしているだけです。

4

2 に答える 2

7

Location モデルのクラス名はLocationではなく にする必要がありますLocationModel

このため、CakePHP は Locations データベース テーブルの「一般的な」モデルを生成し、独自のモデルの代わりにそのモデルを使用します。この汎用モデルにはメソッドがないため、SQLステートメントとしてget()実行され、エラーが発生します。get

また、モデル内では、を使用$this->Location->query();しないでください。$this->query();

于 2013-03-02T13:10:01.633 に答える
3

Location Controller は次のようにする必要があります。

<?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 に答える