0

我是 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

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

4

3 回答 3

1

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

首先,您尝试在Controllerquery()上调用该方法,而您应该在Model上执行它,因为它是处理数据库查询的模型,而控制器应该简单地用于调用这些方法以获取数据并将它们传递给风景。

第二件事是您正在执行一个非常简单的原始 SQL 查询,而不是使用CakePHP 内置的函数<- 请务必完整阅读此页面。

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

public function show(){
    $this->set('discouns', $this->Discouns->find('all', array(
        'conditions' => array(
            'gcil_id' => 1,
            'genre' => 'shoes',
            'company_name' => 'Adidas'
        )
    ));
}
于 2013-02-18T14:21:13.860 回答
0

query()不是控制器,而是模型方法。这就是错误(Call to a member function on a non-object)试图告诉你的。

所以正确的调用是:

$this->Discount->query()

但是你在 a 中调用它TableController,所以除非Table并且Discount某种类型的关系,否则你将无法调用query()

如果Table确实定义了关系,您将能够调用:

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

请注意,这query()仅在标准方法findsavedelete等)不太实用的情况下执行复杂的 SQL 查询时使用。

于 2013-02-18T14:23:55.540 回答
0
$this->Counts->find('all',array(
  'conditions' => array(
    'ctrs.genre' => 'Shoes',
    'ctrs.company_name' => 'Adidas'
  ), 'recursive' => 1
));

以上是名为 counts 和 ctrs 的表。

这是假设您已将模型设置为在 counts 表和 ctrs 表之间建立某种关系。在您的代码中很难准确地说出您的表是什么。

CakePHP 书应该有你需要的所有答案。在常规 PHP 上运行 CakePHP 的原因之一是 FIND 语句。正确设置模型后,使用 find 语句应该非常容易。

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

于 2013-02-18T14:30:32.290 回答