Hello !
Comme vous le savait déjà, Laravel nous facilite la vie en registrant automatiquement des données dans la base de données sans se répéter vace les setAttributes dans les Models.

Mais le problème je n'arrive pas quand une personne publie un article que le champ user_id soit directement mis a jour par son id.

Je je fias ca dans le model Post

public function setUser_idAttribute($value){
        return $value === auth()->id();
    }

Et dazns le controller PostsController

public function store(PostRequest $request)
    {
        $post = Post::create($request->all());
     }

J'ai toujours un message d'erreur comme quoi il ne troiuve pas la valeur du champ user_id

Et je n'ai pas envie de faire du

$post = new Post();
        $post->user_id = auth()->id();
        $post->name = $request->name;
        $post->slug = $slug;
        $post->body = $request->body;
        $post->online = $request->online;
        $post->save()

ou bien du

  $post = Post::findOrFail($id);
        $post->create([
            'name' => $request->name,
            'slug' => $slug,
            'body' => $request->body,
            'online' => $request->online
        ]);

Cela remplissent trop les controller et j'ai envie que mes controller soient le plus leger possible lol
Il y a t-il un moyen s'il vous plait ?

5 réponses


Aurélien
Réponse acceptée

Salut @Soulouf, tu peux faire quelque chose du genre :

protected static function boot()
{
    parent::boot();
    static::creating(function ($model) {
        $model->user_id = auth()->id();
    });
}

(l'id retourné vaut null si l'utilisateur n'est pas connecté)

Aurélien
Réponse acceptée

@Yubo test toi-même auth()->id() (et non auth()->id comme tu l'as écrit), renvoit bien l'id de l'user ou null si la personne n'est pas connectée
;)
Elle agit de la même façon que Auth::id();
Et Auth::user()->id fera une erreur si tu n'as pas préalablement vérifié si la personne était connectée ou pas

verifie si Auth est bien importé dans le model ?

C'est Auth::user()->id et pas auth()->id

Soulouf
Auteur

Ah je vous remercier a tous les deux ! Jez suis désolé du retard de ma réponse, je n'avais pas du tout recu d'email de notification ^

J'avais trainé sur le net et j'ai trouvé aussi une autre facon qui est vraiment super en utilisant les relattions:

    public function __construct()
    {
        $this->middleware(['auth'])->except(['index', 'show']);

    }

     public function store(PostRequest $request)
    {
        $post = auth()->user()->posts()->create($request->all());

        return redirect("post/$post->slug")->with("success", "Félicitations <strong>".auth()->user()->name."</strong>! Votre message <strong>$post->name</strong> a bien été posté!");
    }

Encore merci !!! =)