Re bonsoir, second poste de la soirée....
Sa fait pas longtemps que je me suis mis à cakephp3 et j'ai vraiment du mal...
Bon j'essais de récupèrer des donnée de la table Minecrafts depuis le controller Users...
Hors j'ai une belle petite erreur : SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Minecrafts.allow' in 'field list'
Je veux récupèrer toutes les lignes ou le champ :
users_id => $this->Auth->user('id');
//src/Controller/UsersController.php
public function services(){
$this->loadModel('Minecrafts');
$servers = $this->Minecrafts->find()->where(['users_id' => $this->Auth->user('id')]);
foreach ($servers as $row) {
debug($row);
}
J'ai essayer avec la tables Users :
public function services(){
$user = $this->Users->find()->where(['id' => $this->Auth->user('id')]);
foreach ($user as $row) {
debug($row);
}
}
Et ça fonctionne très bien visiblement il y a un problème avec la tables Minecrafts ? Faut il la chargé d'une manière particulière ?
Je ne comprend pas bien, users_id est le nom de la colone dans la tables Minecrafts.
Je te disais simplement, que dans ta table minecrafts, tu devrais plutôt nommer ta colonne user_id
à la place de users_id
.
De cette manière, tu respectes un maximum les standards de CakePHP et tu pourras avoir moins de spécifications à définir.
il y a pas d'erreur mais je ne récupère rien dans la vue...
C'est normal, ce n'est pas :
$this->set(compact($server));
Mais :
$this->set(compact('server'));
Pour faire simple, il faut mettre le nom de la variable entre simples quotes et non la variable quand on utilise compact
.
Bonjour.
L'erreur te dit que la colonne allow n'existe pas dans ta table minecrafts.
Pour information, par defaut pour CakePHP, le nommage du champ pour la jointure, doit-être : le nom de la table au singulier + un underscore + le nom du champ de la clé primaire.
Dans ton cas : user_id
et non users_id
.
Bonsoir,
Je ne comprend pas bien, users_id est le nom de la colone dans la tables Minecrafts.
Et j'ai remarquer un truc vraiment étrange ( je trouve )
J'ai cette erreur quand je rajoute soit :
foreach ($servers as $row) {
debug($row);
}
ou
$this->set('server' ,$server));
si j'ai : $this->set(compact($servers));
il y a pas d'erreur mais je ne récupère rien dans la vue...
J'ai renomer la table en userid ca fonctionne, mais une question pourquoi cakephp demandai la table Minecrafts.allow ?
Il ne demandait pas la table Minecrafts.allow, déjà ce n'est pas une erreur de CakePHP, mais une erreur de SQL.
CakePHP utilise les alias dans les requêtes SQL, il préfixe les noms des champs avec le nom de la table avec la première lettre en majuscule, donc par exemple :Tables.champ
, ce qui donne dans l'exemple Minecrafts.allow
, donc côté SQL, le champ allow
n'est pas trouvé.