1

条件として true であるモデルからのすべての結果を index.ctp に表示したいだけです。このように選択します:

select * from revistas where isonline = 'true';

コントローラーで以下のコードを試しました:

public function index() {
        //$iscond = $this->Revista->findAllByNome('testa');
        //$this->Revista->query("SELECT id, nome, acronimo, modified, user_id from xconv.revistas where isonline = 't'");
        $this->Revista->find('all', array(
            'contain' => array( 
                'conditions' => array('Revista.isonline' => 't'))));
        $this->Revista->recursive = 0;
        $this->set('revistas', $this->paginate());
    }

上記の2つのコメントはb4を試しました。エラーは返されませんが、条件は実行されません。

より多くのコードを記述するための MVC の他のファイルはありますか? 何が悪かったのか ??

タイ

4

3 に答える 3

3

TLDR:

find()クエリを実行してから完全に別の$this->paginate().

説明:

$this->paginate();実際にクエリを実行します。つまり、基本的に、あなたの質問では、理由もなくクエリを実行していて、それをpaginate()実行すると、条件のない別のクエリが実行されます。

代わりに、次のように条件を適用します。

$this->Paginator->settings = array('conditions'=>array('Revista.isonline' => 't'));
$this->paginate();

注:あなたのコメントと別の回答で指摘されているように、ページネーションに条件を適用する方法は複数あります。この回答の主なポイントは、前のクエリではなく、ページネーションに条件を適用する必要があることを指摘することです。

于 2013-03-12T21:24:41.440 に答える
0

@Daveの回答コメントであなたの手がかりを使用すると、これは「ページネーターフィルター」を使用したソリューションだと思います。

public function index() {
    $this->Revista->recursive = 0;  //your old code
    $this->paginate['conditions']=array('Revista.isonline' => 't'); //new code
    $this->set('revistas', $this->paginate());  //your old code
}
于 2013-03-13T14:06:41.210 に答える
-1

これを試して:

public function index() {

        $this->Revista->find('all', array(
                'conditions' => array('Revista.isonline' => 't')));
        $this->Revista->recursive = 0;
        $this->set('revistas', $this->paginate());
    }
于 2013-03-12T20:55:39.890 に答える