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で実行する必要があります。これは、データベースクエリを処理するモデルであり、コントローラーを使用してこれらのメソッドを呼び出してデータを取得し、それらを渡す必要があるためです。景色。

2 つ目は、 CakePHP の組み込み関数を使用する代わりに、非常に単純な SQL クエリを raw で実行していることです<- このページをすべて読んでください。

モデルの関係を正しく設定し、正しい命名規則に従っている限り、これはそのコントローラーから 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()コントローラではなく、モデル メソッドです。それがエラー (非オブジェクトのメンバー関数への呼び出し) が伝えようとしているものです。

したがって、正しい呼び出しは次のようになります。

$this->Discount->query()

しかし、これを で呼び出しているので、とがなんらかの関係を持たTableControllerない限り、を呼び出すことはできません。TableDiscountquery()

に関係が定義されている場合は、Table次を呼び出すことができます。

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

これは、標準的な方法( 、、など) が実用的でないquery()シナリオで複雑な SQL クエリを実行する場合にのみ使用されることに注意してください。findsavedelete

于 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 を実行する理由の 1 つは、FIND ステートメントです。モデルを正しく設定したら、find ステートメントを使用するのは非常に簡単です。

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

于 2013-02-18T14:30:32.290 に答える