Heim  >  Artikel  >  Backend-Entwicklung  >  Cakephp, wie man unbind in paginate verwendet

Cakephp, wie man unbind in paginate verwendet

黄舟
黄舟Original
2016-12-20 10:03:551637Durchsuche

Paginieren im Cakephp-Controller ist eine Funktion, die Paginierungsdaten abruft. Mit dem Paginator im Helfer können Sie ganz einfach paginierte Listen und sortierte Listenseiten erstellen.
Aber als ich anfing, die Verwendung von Cakephp zu erlernen, stellte sich eine Frage Das hat mich gestört.
Wie entbinde ich ein Modell?
Solange ich die Modelle, die ich nicht benötige, entbinde, muss ich nicht nach diesen modellierten Assoziationen suchen Datentabelle. Und nachdem es gefunden wurde, wird es automatisch mit dem Modell verknüpft, das ich zuvor veröffentlicht habe. Die folgende ist die häufig verwendete Methode


//Benutzermodell
Klasse Benutzer erweitert AppModel {

var $name = 'User';
var $belongsTo = array(
'Profile' = array('className'=>'Profile','foreignKey'=>'user_id' )
     )
}


Führen Sie den folgenden Code aus


$this->User->unbind(array(' gehört zu '=>array('Profile')));
$rs=$this->User->find();


$rs wird sein


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


Wenn unbind nicht vor find ausgeführt wird, $ rs wird sein


array(
>


Aber Sie erhalten nicht das gleiche Ergebnis, wenn Sie paginate

code]$this->User->unbind(array('belongsTo'=>array( 'Profile')));

$rs=$this->paginate('User');
[/code]
Das Ergebnis von $rs ist immer noch



array(
'User'=>array(),

'Profile'=> array()

)



Warum kann es nicht in paginate Association (unbind) freigegeben werden?
Der Grund dafür ist, dass find nach dem Abrufen der Daten verwendet wird model->resetAssociations(); wird in paginate zweimal verwendet, um die Daten im Paging anzuzeigen 🎜>Lösung: Weisen Sie dem zweiten Parameter von unbind einen unwahren Wert zu. Wenn der zweite Parameter von unbind wahr ist, speichert cakephp die Datenbank, die getrennt werden muss, in model->__backAssociation (); es stellt die relevanten zugehörigen Daten von model->__backAssociation wieder her. Der folgende Code kann es also lösen



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


Zusätzlich, wenn Nachdem Sie paginate() ausgeführt haben, müssen Sie die zugehörigen Daten im Modell verwenden, um die Daten zu finden. Sie können sie in die Datei app_model.php einfügen. Den folgenden Code


/**
     * Funktionsbeschreibung: Deaktivieren Sie die Zuordnung und geben Sie die Zuordnung zurück.
   *                      Die Funktion funktioniert für Controller->paginate() und Model->bind().
   *                      Die Funktion funktioniert Helfen Sie dabei, Daten aus Controller->paginate() abzurufen, bevor Sie einige Bindungen aufheben
   *                      <br>   *                         
     * @Date:2008-10-10
   *
   * $backAssociation = $this->ModelName->unbindAndPushModels(array('belongsTo'=>array('User')));
   * $result= $this->paginate('ModelName');
   * $this->ModelName->bind($backAssociation);//diese Aktion dient der Wiederherstellung des Modells der Assoziationsdaten.
   * < /code
     * @param    (类型)参数名  :描述
  **/
Function unbindAndPushModels($params)
{
$backAssociation=array();
foreach ($params as $assoc => $models)
{
foreach ($models as $model)
{
If(isset($this->{$assoc}[$model]))
{
          $backAssociation[$assoc][$model] = ; backAssociation;

Wie Cakephp in Paginate verwendet, finden Sie auf der chinesischen PHP-Website (www.php.cn). )!




Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn