8
votes

Appel d'erindmodel à CakePHP. Comment ça marche?

Comment l'Undindmodel arrive-t-il dans le gâteau?

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend')));
$user = $this->paginate("User", array("User.first_name LIKE" => $user["User"]["first_name"]));


0 commentaires

3 Réponses :


12
votes

Dans le manuel : < / p>

Suppression ou ajout d'associations à l'aide de BIND- et UNBINDMODEL () ne fonctionne que pour la prochaine opération de modèle sauf si le deuxième paramètre n'a été défini sur false . Si le deuxième paramètre a été défini sur false , la liaison reste en place pour le reste de la requête.

En d'autres termes, après que vous paginate () ou trouve () ou faites autre chose avec le modèle, le débrouillage sera inversé.


5 commentaires

Dans ce cas, c'est une bonne pratique d'engourner comme ça ?? nonset ($ this-> user-> hasandbelongstomany ["ami])


@Rsk qui ne ferait que rien ou ne casserait des choses horriblement. Je ne voudrais pas essayer de toute façon.


Stackoverflow.com/ Questions / 3707859 / ... peut-on répondre pour cela


@Rsk Non, parce que je ne vois aucun besoin de valider les informations de connexion. Le login est correct ou ce n'est pas le cas, donner plus de détails ne permet que des attaquants potentiels. J'ai écrit à ce sujet ici avant quelque part, mais je ne peux pas le trouver maintenant.


Pour les futurs visiteurs, cela ne devrait pas être la réponse acceptée - le paginate () fonctionne deux fois à deux reprises (comme indique DarkCode indique ci-dessous, une fois pour récupérer les données, et une fois pour récupérer le compte) afin que vous puissiez obtiendra des résultats très étranges en appelant paginate () après un Unbindmodel () sans l'option persist définie sur true .



4
votes

Eh bien, dans mon expérience avec des incrédues, je peux dire que le paginate fait toujours 2 requête une pour compter le total et le second pour le graphique de résultat

Ungind Détruisez une fois la relation et votre âge dont vous avez besoin d'étendre cette règle pour détruire Deux fois ou plus, vous devez donc définir VRAI, je suppose que cela persiste cette règle: xxx


0 commentaires

0
votes

Essayez ceci:

$this->Leader->find('all');

// Let's remove the hasMany...
$this->Leader->unbindModel(
    array('hasMany' => array('Follower'))
);

// Now using a find function will return
// Leaders, with no Followers
$this->Leader->find('all');

// NOTE: unbindModel only affects the very next
// find function. An additional find call will use
// the configured association information.

// We've already used find('all') after unbindModel(),
// so this will fetch Leaders with associated
// Followers once again...
$this->Leader->find('all');


0 commentaires