ホームページ  >  記事  >  バックエンド開発  >  Cakephpのページネーションでアンバインドを使用する方法

Cakephpのページネーションでアンバインドを使用する方法

黄舟
黄舟オリジナル
2016-12-20 10:03:551637ブラウズ

cakephp のコントローラーの paginate は、ページネーション データを取得する関数です。ヘルパーに Paginator を使用すると、ページ分割されたリストやソートされたリスト ページを簡単に作成できます。
モデルのバインドを解除するにはどうすればよいですか?
通常の状況では、検索する前に必要のないモデルをバインド解除する限り、これらのモデルに関連付けられたデータ テーブルを検索する必要はありません。将来的には、以前にリリースしたモデルが自動的に再び関連付けられます。 以下はよく使用されるメソッドです

//user model
class User extends AppModel {

var $name = 'User';
var $belongsTo = array(
'profile' = array( 'classname' => 'profile'、 'foreignkey' => 'user_id') ;unbind(array('belongsTo'=>array('Profile')));
$rs=$this->User->find();


$rs は



array になります(

'user' = & gt; array (),
)

find 前に実行せずにアンバインドした場合、$ rs は

Array (
'user' = & gt; array (),
' ,
' Profile'=>array()
)



しかし、paginate

code]

$this->User->unbind(array('belongsTo' =>array( 'Profile')));
$rs=$this->paginate('User');
[/code]
$rs の結果は依然として

array(
'User '=>array() ,
'Profile'=>array()
)



なぜページネーションでアンバインドできないのですか?

その理由は、find でデータを取得した後、find がモデルを使用するためです。 >resetAssociations(); すべての関連付けが復元されます。1 回目は合計数を取得するために、もう 1 回はページに表示されるデータを取得するために使用されます。そのため、返された結果にはプロファイルの内容が含まれています。

解決策: unbind の 2 番目のパラメーターに true 以外の値を割り当てます。unbind の 2 番目のパラメーターが true の場合、cakephp は、model->__backAssociation の実行時に関連付けを解除する必要があるデータベースを保存します。 ;resetAssociations(); model-> から取得されます;__backAssociation は関連する関連データを復元しますので、次のコードで問題を解決できます



$this->User->unbind(array('belongsTo'=) >array('Profile')),false);
$rs=$this->paginate('User');



さらに、paginate() を実行した後、関連するデータを使用する必要がある場合モデル内でデータを検索するには、次のコードを app_model.php ファイルに追加します。


/**
* 関数の説明: アソシエーションをオフにし、アソシエーションを返します。
* この関数は、Controller->paginate() および Model->bind() で動作します。
* この関数は、データフォームを取得するのに役立ちます一部のバインドを解除する前にコントローラー->paginate()
* データを取得した後に関連付けを削除し、再バインドします。
* 関連付けを再バインドする必要がない場合は、
* * <コード>
* $this - &gt; models-&gt; unbind($ params、false);
*&lt;/code&gt;
* @date:2008-10-10
*&lt; code&gt; >unbindAndPushModels(array('belongsTo'=>array('User')));
* $result=$this->paginate('ModelName');
* $this->ModelName->bind ($backAssociation);//このアクションは、関連付けデータのモデルを復元することです。
* * @param (类型)パラメータ名 :描述
**/
Function unbindAndPushModels($params)
{
$backAssociation=array();
foreach ($params as $assoc => $models)
{
foreach ( $models as $モデル)
}[$model]);
} $backAssociation を返します。




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。