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
Réponse acceptée

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
Auteur
Réponse acceptée

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.

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 ?

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

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 ?

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);