0

我有一个标准的 cakePHP 2.2 安装,并希望在主页上显示一个购物车,这是一个 cookie,存储映射到数量的产品 ID 数组。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() 方法。我应该一直在尝试在模型中创建此功能,而不是在控制器中。我将其更改为使用 $this->Product->findById() 反正这是我想要的。

4

1 回答 1

3

产品型号不是您的产品型号

如果您在不存在的模型上调用方法,它将作为查询传递给数据库:

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

错误说:

错误:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“getData”附近使用正确的语法

因此,您调用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 回答