CakePhp mysql原始查询错误

时间:2013-02-18 13:43:02

标签: mysql cakephp cakephp-2.1

我是cakephp的新手。我正在尝试搜索mysql表。我想使用嵌套查询。

 class TableController extends AppController{  
 .
 .
 public function show(){
    $this->set('discouns', $this->DiscounsController->query("SELECT * FROM discoun as Discoun WHERE gcil_id = 1"));//(SELECT id FROM gcils WHERE genre = 'Shoes' AND company_name = 'Adidas')"));
}

} 错误:

 Error: Call to a member function query() on a non-object   

我也试过

public function show(){
    $this->DiscounsController->query("SELECT * FROM count as Count WHERE ctr_id = (SELECT id FROM ctrs WHERE genre = 'Shoes' AND company_name = 'Adidas')");
}

错误:

 Error: Call to a member function query() on a non-object   

文件:C:\ xampp \ htdocs \ cakephppro \ myapp \ Controller \ CountsController.php

请帮忙。过去几个小时我一直在尝试这个。 :/

3 个答案:

答案 0 :(得分:1)

正如评论中所提到的,您的代码存在一些问题。

首先,您尝试在控制器上调用query()方法,而您应该在模型上执行它,因为它是模型处理数据库查询和控制器应该只是用来调用这些方法来获取数据并将它们传递给视图。

第二件事是你正在执行一个非常简单的SQL查询原始而不是使用CakePHPs built in functions< - 请务必完整阅读本页。

现在针对您的问题,只要您正确设置model relationships并遵循正确的命名约定,这应该是您从该控制器运行SQL查询的代码:

public function show(){
    $this->set('discouns', $this->Discouns->find('all', array(
        'conditions' => array(
            'gcil_id' => 1,
            'genre' => 'shoes',
            'company_name' => 'Adidas'
        )
    ));
}

答案 1 :(得分:0)

query()不是Controller,而是Model方法。这就是错误(对非对象的成员函数的调用)试图告诉你的。

所以正确的电话会是:

$this->Discount->query()

但是您在TableController中调用此内容,因此除非TableDiscountsome type of relationship,否则您将无法拨打query()

如果Table确实有定义的关系,您可以致电:

$this->Table->Discount->query()

请注意query()仅在the standard methodsfindsavedelete等)的情况下执行复杂SQL查询时使用不太实际。

答案 2 :(得分:0)

$this->Counts->find('all',array(
  'conditions' => array(
    'ctrs.genre' => 'Shoes',
    'ctrs.company_name' => 'Adidas'
  ), 'recursive' => 1
));

以上是名为count和ctrs的表。

这假设您将模型设置为在count表和ctrs表之间存在某种关系。很难在代码中准确地告诉你表格是什么。

CakePHP书应该包含您需要的所有答案。在常规PHP上运行CakePHP的原因之一是FIND语句。一旦正确设置了模型,使用find语句应该非常简单。

http://book.cakephp.org/2.0/en/models.html