Laravel France

[Eloquent] Ajouter une valeur dans une table pivot à partir d'un bouton

Avatar de MeneldiI
MeneldiI

Bonsoir,

Dans le cadre d'un projet Laravel, j'ai prévu de créer un site qui permet aux utilisateurs d'ajouter des jeux vidéos à leur bibliothèque virtuelle.

Pour cela, il faut que l'utilisateur, une fois connecté, puisse ajouter un jeu à sa bibliothèque. J'ai cru comprendre qu'il fallait passer par la méthode attach() afin d'ajouter une ligne dans la table pivot entre utilisateur et jeu, cependant, je ne comprends absolument pas comment y parvenir. J'ai pu essayé différentes choses, mais aucune ne fonctionne, voici le dernier test en date :

JeuController.php:

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Jeu $jeu,User $user)
{
    $idJeu = $jeu->id;
    $idUser=$user->getId;
    auth()->user()->jeus()->attach($idJeu);
    return view('index');  
}

listeJeux.blade.php:

<section class='row'>
    @foreach($jeus as $jeu)
        <body>
        <div class='col-md-2 col-sm-4 col xs-6'>
            <div class="card" >
                <img  class="card-img-top" src = "{{asset('images/'.$jeu->image)}}">
                <div class="card-body">
                    <h5 class="card-title">{{$jeu->titre}}</h5>
                    <a href="{{ route('jeux.show', $jeu->id)}}" class="btn btn-primary">Voir</a>
                    @auth
                        <a href="{{ route('jeux.store', $jeu->id, Auth::user()->getId() )}}" class="btn btn-primary">ajouter</a>
                    @endauth    
                </div>
            </div>
        </div>
    @endforeach
</section>

Merci pour vos réponse, n'hésitez pas à demander plus de renseignements sur le code si besoin

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Déjà tu peux virer ton user de tes parametres vu que tu te sers de auth()->user() Ensuite, je ne sais pas si tu peux utiliser le auth()->user() pour attribuer des données (je ne suis jamais posé la question d'ailleurs). Essaye peut-être ça:

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Jeu $jeu)
{
    $idJeu = $jeu->id;
    
    $user = User::find(auth()->user()->id);
    $user->jeus()->attach($idJeu);
    
    return view('index');  
}

Ton lien sera donc <a href="{{ route('jeux.store', $jeu->id)}}" class="btn btn-primary">ajouter</a> Ta route sera pêut-être également à modifier si tu as le user dedans.

Je n'ai jamais utilisé la methode attach() alors je garantis rien.

Après, bon, tu sais que le mot jeu au pluriel ça prends un x, hein ?

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.