0

私は標準の CakePHP 2.2 をインストールしており、数量にマッピングされた productID の配列を格納する Cookie であるカートをホームページに表示したいと考えています。Cookie が正しく設定されていることを確認しました。

cookie 配列から ID を取得できます。ID の文字列ではなく、製品名、価格などをデータベースから取得して、これらをユーザーに提示する必要があります。

AppController.php ファイルでこれを行う必要があるという印象を受け、以下のコードが必要です。しかし、これにより、以下のようなエラーが発生します。getData() は私の ProductController.php クラスのメソッドです。$uses と $this->loadModel を使用してみましたが、どちらも機能していないようです。

Product->getData() は、基本的に製品のデータベース行を返します。これを default.ctp ファイルでフォーマットします。これを行う正しい方法は何ですか?

class AppController extends Controller {
    public $components = array('Cookie', 'Session');
    //public $uses = array('Product');

    function beforeFilter() {
        $this->loadModel('Product');
        $cookieCartVar = $this->Cookie->read('Cart');
        $this->set('cookieCart', $cookieCartVar);

        $p = array();
        if (count($cookieCartVar) > 0) {
            foreach ($cookieCartVar as $prodId => $qty) {
                $p[] = $this->Product->getData($prodId);
            }
        }
        $this->set('cookieProducts', $p);
    }       
}

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 'getData' at line 1

SQL Query: getData 

編集

これは、ProductsController.php で getData() メソッドを誤って設定しようとしたために発生しました。CONTROLLERではなくMODELでこの機能を作ろうとしていたはずです。これが私が欲しかったものだったので、とにかく $this->Product->findById() を使用するように変更しました。

4

1 に答える 1

3

製品モデルはあなたの製品モデルではありません

存在しないモデルでメソッドを呼び出すと、クエリとしてデータベースに渡されます。

$someModel->woopWoop(); // executes `woopWoop`

エラーは言う:

エラー: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。1行目の「getData」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

そのため、呼び出してgetDataいるモデルは、getData という名前のメソッドを持つモデルではありません。

プラグインからモデルをロードしたいが、代わりに AppModel のインスタンスが必要です。その場合、次のことを行う必要があります。

$this->loadModel('MyPlugin.Product');

または、インスタンスは正しいクラスですが、単にメソッドを持っていませんgetData。次のようにするだけで、どれを確認できますか。

debug(get_class($this->Product)); // outputs e.g. "Product" or "AppModel"
于 2013-01-27T16:03:40.693 に答える