Bonjour,
Voilà mon souci, j'ai mon model suivant "WorkModel" dans lequel j'ai crée une fonction test() qui retourne true.
Depuis le controller "WorksController", j'essaye de faire appel à cette fonction mais j'ai l'erreur suivante :
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test' at line 1
Après plusieurs recherches, je me suis rendu compte que si je crée la fonction dans "AppModel" alors j'aurais plus l'erreur.
Mais vous imaginez que cela ne me convient pas, car tout mes models auront accès à cette fonction.
Et je ne comprends pas pourquoi Cake passe outre mon model pour direct passer à AppModel.
Pour info :
Version de Cake : 2.6.2
Version php : 5.5
WorkModel.php
<?php
App::uses('AppModel', 'Model');
/**
* Work Model
*
*/
class Work extends AppModel {
public function test(){
return true;
}
}
WorksController.php
App::uses('AppController', 'Controller');
class WorksController extends AppController {
public function beforeFilter(){
parent::beforeFilter();
}
//Cette ligne a été rajouté après mes recherches sur internet, mais elle ne résout pas le problème.
public $uses = array('Work');
public function index(){
$tmp = $this->Work->test();
debug($tmp);
}
}
Merci par avance pour tout aide apporté.
Problème résolu, j'avais juste mal nommer mon fichier ce n'est pas WorkModel.php mais Work.php.
Tout ça de temps à chercher pour au final, une erreur d'inattention pfff...
Parfois dégouté
Bonsoir.
C'est normal.
Pour commencer, il faut éviter de nommer une fonction de Model : test.
Ensuite, lorsque tu crées une fonction dans ton modèle qui sort de celles fournies par CakePHP, il est préférable de la préfixer par get, de manière à faire un getter.
Par exemple :
public function getRecents($limit)
{
return $this->find('all', ['limit' => $limit, 'order' => 'created DESC']);
}
Oui en effet, je sais.
A la base ma fonction était "getWorks", mais j'avais également l'erreur.