Bonjour, je viens vers vous car je n'ai pas réussie à utilisé le nouveau système de clé valeur, sous cake2, j'utilisé loadModel puis un find list, mais apparement sur cake 3 c'est différent ! En suivant le book, j'ai pu construire ce code
$query = $this->Models->find('list', [
'idField' => 'var1', 'valueField' => 'var2'
]);
$data = $query->toArray();
$this->set(compact('data'));
Mais une erreur de ce type apaprait !
Call to a member function find() on boolean
Merci x)
Dans ta base de donnee, as tu un table qui se nomme Models ?
Sinon cree un fichier dans le dossier model et apres loadModel() juste avant ta requete.
$this->loadModel('nom_de_la_table');
$query = $this->nom_de_la_table->find('list', [
'idField' => 'var1', 'valueField' => 'var2'
]);
$data = $query->toArray();
$this->set(compact('data'));
Ah faut tout de même utilisé le loadModel ? Je trtouve sa degeulasse, je pensais qu'avec la nouvelle version on aurait pu s'en passer ! Merci quand même x)
J'aurais une autre question, c'est comment puis-je save un champ, je pense a un id, ou une clé sans passer par la méthode de l'input caché ?
Tu peux save en recuperant l'id depuis l'url et pour plus de securite tu peux ajouter dans ta base de donnee un champ token pour etre sur de faire des modifications que sur l'id en question.
Pour loadModel tu peux t'en passer et le declare dans ton controller avant le debut de tes methodes, tu ajoutes :
public $uses = array(nom_de_la_table, nom_de_la_table, nom_de_la_table); ....
Non, mais j'ai une page d'édition, ou j'ai une fonction pour generer une reference, j'aimerais que lorsque l'article est save en BDD la reference generer se save aussi, mais j'aimerais éviter d'avoir un input hidden pour l'enregistrer, j'ai essayer l'aftersave dans le model mais je doit mal l'utilisé !:
public function afterSave(Event $event, Entity $entity){
if($this->Adverts->save()){
$ref = $this->ref();
$ref = $this->Adverts->reference;
}
}
Je pourrais pas vraiment t'aider sur ce coup la, j'ai essayer de creuser pour trouver une solution mais c'est hors de mes compétences, si tu y arrives surtout partages avec nous ^^
Tu peux éviter l'utilisation du loadModel(), à condition que le controller est le même nom que la Table. Par exemple :
UsersTable.php
UsersController.php
$this->Users->find().. etc
La ça va fonctionner directement, mais sa fonctionneras uniquement pour la table Users. Si tu veux utiliser la table PostsTable dans le controller Users, alors il faudra, soit utiliser loadModel(), soit TableRegistry::get().
Sa peux paraître plus chiant que dans Cake2 où on "loadais" tout dans le $uses, mais en faite, sa permet tout simplement d'utiliser uniquement les models qu'on à besoin dans les actions qui en ont besoin, et par conséquent, on gagne en perf. :)
Okey, merci pour ta réponse et tu ne serais pas comment faire pour save une variable dans la bdd depuis le controller sans passer par un form ?