我有一个标准的cakePHP 2.2安装,并希望在主页上显示一个购物车,这是一个cookie,存储映射到数量的产品ID数组。cookie 设置正确,我已经验证了。
我可以从 cookie 数组中检索 ID,现在需要从数据库中获取产品名称、价格和东西,以便将它们呈现给用户,而不是一串 ID。
我的印象是我应该在我的AppController.php文件中执行此操作,并具有以下代码。但这给了我下面的错误。getData() 是我的 ProductController.php 类中的一个方法。我尝试使用$uses和使用$this->loadModel,但似乎都不起作用。
Product->getData() 基本上返回产品的数据库行。我将在我的默认.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
编辑
发生这种情况是因为我错误地尝试在产品控制器.php中设置 getData() 方法。我应该尝试在模型中制作这个函数,而不是控制器。无论如何,我将其更改为使用$this->Product->findById(),因为这是我想要的。
产品型号不是您的产品型号
如果在不存在的模型上调用方法,它将作为查询传递给数据库:
$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"