cakephp 컨트롤러의 Paginate는 헬퍼에 있는 Paginator를 사용하면 쉽게 페이지 매김 목록과 정렬된 목록 페이지를 만들 수 있습니다.
그런데 cakephp 사용법을 배우기 시작하면서 궁금한 점이 생겼습니다.
모델 바인딩을 해제하는 방법
일반적인 상황에서는 찾기 전에 필요하지 않은 모델을 바인딩 해제하는 한 이러한 모델 연결을 검색할 필요가 없습니다. 그리고 이를 찾은 후 이전에 출시한 모델을 자동으로 연결합니다. 다음은 일반적으로 사용되는 방법입니다
//user model
class User extends AppModel {
var $name = 'User';
var $belongsTo = array(
'Profile' = array('className'=>'Profile','foreignKey'=>'user_id' )
)
}
다음 코드를 실행하세요
$this->User->unbind(array(' 소속 '=>array('Profile')));
$rs=$this->User->find();
$rs는
array(
'User'=>array(),
)
찾기 전에 바인딩 해제가 실행되지 않으면 $ rs는
array(
>
그러나 paginate
$rs=$this->paginate('User');
[/code]
$rs의 결과는 여전히
array(
'User'=>array(),
)
왜 paginate Association(unbind)에서 해제할 수 없나요?
이유는 find에서 데이터를 가져온 후 find가 사용하기 때문입니다. model->resetAssociations(); 페이지 매김에서 찾기는 두 번 사용됩니다. 한 번은 페이징에 표시되는 데이터를 가져옵니다. 🎜>해결 방법: unbind의 두 번째 매개 변수에 true가 아닌 값을 할당합니다. unbind의 두 번째 매개 변수가 true이면 cakephp는 model->resetAssociations를 실행할 때 연결을 해제해야 하는 데이터베이스를 저장합니다. (); 이는 model->__backAssociation에서 관련 데이터를 복원하므로 다음 코드로 이를 해결할 수 있습니다
$this->User->unbind(array(' ownTo'=>array('Profile')),false);
$rs=$this-> ;paginate('User');
또한 다음과 같은 경우 paginate()를 실행한 후 모델의 관련 데이터를 사용해야 app_model.php 파일에 추가할 수 있습니다. 다음 코드
/**
* 함수 설명: 연결을 끄고 연결을 반환합니다.
* Controller->paginate() 및 Model->bind()에 대해 작동하는 함수입니다.
* 기능은 다음과 같습니다. 일부 바인딩을 해제하기 전에 Controller->paginate()에서 데이터를 가져오는 데 도움이 됩니다.
* 데이터를 가져온 후 연결 제거를 위한 연결 및 리바인딩
* 연결을 다시 바인딩할 필요가 없는 경우에만 사용할 수 있습니다 >
* @Date:2008-10-10
*
* $backAssociation = $this->ModelName->unbindAndPushModels(array('belongsTo'=>array('User')));
* $result= $this->paginate('ModelName');
* $this->ModelName->bind($backAssociation);//이 작업은 연결 데이터의 모델을 복원하는 것입니다.
* < /code
* @param (类型)参数name :描述
**/
함수 unbindAndPushModels($params)
{
$backAssociation=array();
foreach ($params as $assoc => $models)
{
foreach ($models를 $model로)
{
If(isset($this->{$assoc}[$model]))
{
$backAssociation[$assoc][$model] = ; backAssociation;
위는 Cakephp가 페이지 매김에서 unbind를 사용하는 방법입니다. 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요. )!