Problème update champ

Par passealasuite, il y a 10 ans


Bonjour à tous,

Voila je souhaite mettre un à jour un champ dans ma table, pour mettre un article en favoris. Pour cela je veux simplement renseigner le champ 'favorite' d'un post avec une valeur de 1. J'ai donc créé le controller ainsi que l'action effectuant le traitement.

class PostsController extends AppController { public function favorite($id = null){ $postsTable = TableRegistry::get('Posts'); $post = $postsTable->get($id); $post->favorite = 1; $postsTable->save($post); } }

Je me rend ensuite sur l'url suivante : http://localhost/posts/favorite/1

Le problème est que le framwork me renvoie cette erreure :

Record not found in table "posts" with primary key ['1']

Pourtant j'ai bien une entrée dans ma table 'Posts' ayant un id à 1.

Merci pour votre aide.

6 réponses

Ferias Quarante, il y a 10 ans

Bonjour, étant donné que tu es dans le controller Posts pourquoi ne pas faire directement :

$post = $this->Posts->get($id); //...

Sinon quelles routes as tu mises ?

passealasuite, il y a 10 ans

Effectivement je peux directement accédé au post via se code. Néanmoins j'ai toujours la même erreur.

Ferias Quarante, il y a 10 ans

un debug($id) au début te récupère bien 1 comme valeur ?
un debug($post) juste après le get te donne une requête cohérente ?

passealasuite, il y a 10 ans

Oui le debug($id) me renvoi bien un 1. Par contre le debug($post) ne fonctionne pas puisque l'erreur se passe sur la ligne :

$post = $postsTable->get($id);
Ferias Quarante, il y a 10 ans

Tu n'as pas de configuration spéciale sur ta table pour la clé primaire ?
En faisant un try catch sur le get tu peux faire un debug sur l'exception RecordNotFoundException

passealasuite, il y a 10 ans

Je viens de trouver le problème. Mes clés étrangères étaient entrées comme clés primaires. Donc le framwork ne pouvait déterminer la bonne clé primaire.

Merci beaucoup pour ton aide.