1

私の知る限り、私はモデルの関係を制御するために再帰を使用していました。モデル間に関係を作成すると、必ずページネーションに自動接続されます。それを制御するには、再帰を使用する必要があります。デフォルトでは、その値は1and to control です。-1またはとして使用する必要があること0。はいContainable、他のモデルからのフェッチ結果を自動的に制御する動作について読みましたが、関係は作られています。

私は書いているのと同じことをしました

public $actsAs = array('Containable'); 

私のコントローラーで私が書いた

$this->Album->Behaviors->load('Containable', array('autoFields' => false, 'recursive'=>false));

しかし、私のデフォルトのページネーションは、他のモデルからデータを呼び出し、他のモデルでクエリをフェッチします。

$this->paginate['Album'] = array('conditions' => $condition, 'limit' => '50', 'order' => array('Album.id' => 'DESC'));
$this->set('albums', $this->paginate('Album'));

私の期待データによると、私のデフォルトのページネーションコードはAlbum Model、他のモデルから取得するためのものであり、それを記述しなければなりませんPaginationが、デバッグキットでチェックすると、これが表示されます。

ここに画像の説明を入力

すべての変数からデータをフェッチするだけでなく、 ここに画像の説明を入力

私は何をすべきか ??どこが間違っていますか??

4

2 に答える 2

1

関連するモデルのデータは必要ありません。間違っている場合は修正してください。このためには、contain プロパティを false に設定する必要があります。これはアルバムモデルのデータのみをもたらします

$this->paginate['Album'] = array('conditions' => $condition,'contain' => false 'limit' => '50', 'order' => array('Album.id' => 'DESC'));
$this->set('albums', $this->paginate('Album'));

次のようなクエリで複数のモデルをアタッチする場合は、Contain が役立ちます。

$this->paginate['Album'] = array('conditions' => $condition,'contain' => array('model1','model2'), 'limit' => '50', 'order' => array('Album.id' => 'DESC'));

これがうまくいくことを願っています。ありがとう

于 2013-06-18T19:31:48.880 に答える
0

モデルが包含可能に設定されている場合でも、 を設定してrecursive関連falseデータの取得を防ぐことができます。

サンプルモデル:

<?php
class Article extends AppModel {

    public $actsAs = array('Containable');
    public $belongsTo = array('Category');
}

サンプルコントローラー:

<?php
class ArticlesController extends AppController {

    public function index() {
        $this->Article->recursive = 0;
        $this->set('articles', $this->paginate('Article'));
    }

    public function view($id) {
        $this->Article->recursive = 0;
        $this->set('article', $this->Article->findById($id));
    }
}
于 2013-06-18T19:35:56.823 に答える