Bonjour,

J'ai un problème pour insérer dynamiquement la FK d'un post lors de l'ajout d'un commentaire.

Dans mon PostController.php:

public function postComment($id) {
        $post = Post::find($id);
        $rules = array(
            'commentaire' => 'required'
        );
        $validation = Validator::make(Input::all(), $rules);
        if($validation->fails()) {
            return Redirect::to('post/lire/'.Str::slug($post->title).'/'.$post->id)->withErrors($validation)->withInput();
        }
        else {
            $comment = array('content' => Input::get('commentaire'), 'user_id' => Auth::user()->id);
            if($post->comments()->insert($comment)) {
                Session::flash('comment_success', 'Commentaire ajouté');
                return Redirect::back();
            }
        }
    }

Lors de l'ajout d'un commentaire la colonne 'post_id' (ainsi que les colonnes 'created_at' et 'uploaded_at') n'est pas renseigné automatiquement dans ma table comments :

La ligne qui me pose problème est :

$post->comments()->insert($comment)

Voici mon model Post.php:

class Post extends Eloquent {
    public function user() {
        return $this->belongsTo('user');
    }
    public function comments() {
        return $this->hasMany('comment');
    }
}

Quelqu'un peut il m'aider svp ?

Merci d'avance,
++

1 réponse


barbuslex
Auteur
Réponse acceptée

Résolu en ajout à mon model Comment.php :

protected $guarded = array('id');

Et en remplaçant dans mon controller PostController.php:

$comment = array('content' => Input::get('commentaire'), 'user_id' => Auth::user()->id);
if($post->comments()->insert($comment)) {

Par :

$comment = new Comment(array('content' => Input::get('commentaire'), 'user_id' => Auth::user()->id));
if($post->comments()->save($comment)) {

Il y a pas mal de changements entre laravel 3 et 4 c'est un peu difficile de s'y retrouver dans tout ça...