Bonjour,

J'ai sur mon site, une sorte de panneau de configuration où je peux ajouter, modifier et supprimer des utilisateurs. Le soucis est que je pêche un peu pour la partie "modifier".

Je procède à tatons, et j'ai une erreur qui me gène : j'aimerais pouvoir afficher les valeurs de mon utilisateur (nom prenom etc..) sur les champs pour les modifier ensuite, je le fais avec le code de ma vue :

@section('content')
{!! Form::model($user, ['route' => ['gestionUser.update', $user->id], 'method' => 'put', 'class' => 'form-horizontal panel']) !!}
    <div id="formulaire">
        <div id="logi" class="form-inline">
            {!! Form::label('name', 'Login :') !!}
            {!! Form::text('name', $user->name, ['class' => 'form-control']) !!}
        </div>

        <div id="nomU" class="form-inline">
            {!! Form::label('nom', 'Nom :') !!}
            {!! Form::text('nom', $user->nom, ['class' => 'form-control']) !!}
            {!! Form::label('uprenom', 'Prenom :') !!}
            {!! Form::text('uprenom', $user->prenom, ['class' => 'form-control']) !!}
        </div>

        <div id="mailU" class="form-inline">
            {!! Form::label('email', 'Adresse mail :') !!}
            {!! Form::email('email', $user->email, ['class' => 'form-control']) !!}
        </div>

        <div id="RangU" class="form-inline">
            {!! Form::label('role', 'Role :') !!}
            {!! Form::text('role', $user->role, ['class' => 'form-control']) !!}
        </div>

        <button class="btn btn-primary register">Modifier</button>
    </div>

{!! Form::close() !!}
@stop

Sauf que quand je vais dans ma page de modification, j'ai une erreur : Undefined property: Illuminate\Database\Eloquent\Collection::$id

Du coup il y a aussi le code de mon update dans le UserController :

public function update(Request $request){

        $validator = $this->validator($request->all());

        if ($validator->fails()) {
            $this->throwValidationException(
                $request, $validator
            );
        }

        $user = User::update($request->All());

        return Redirect::route('gestionUser.index')->with('success', 'La modification a correctement été effectuée');
    }

Et celui de mon edit

    public function edit(){

        $user = User::get();

        return view('user.modif', compact('user'));
    }

Pour l'instant je met la partie "modifier l'utilisateur" pour d'abord régler mon soucis, et ensuite je m'occuperais de ça, le truc c'est que je ne comprends pas l'erreur, ni comment la régler.
Je sais que je devrais pouvoir régler ce soucis avec un foreach, mais ça ne m'irait pas pour mon formulaire, du coup auriez vous des idées ?

Merci d'avance ^^

6 réponses


Azorgh
Réponse acceptée

Bonjour,

Alors je vois que tu utilise la méthode User::get() pour l'édition. Seulement, il y a 2 choses qui me dérangent.
La première, c'est que tu ne passe aucune condition a ta requête (donc il récupère n'importe quel utilisateur).
Secondo, tu utilise get() qui permet de récupérer une multitude de données (par exemple dans ton cas, TOUS les utilisateurs). Il faut donc utiliser la méthode first() pour n'obtenir que le premier résultat.
Le fait d'utiliser get(), te retourne une Collection d'objet User (Un gros tableau mais façon Laravel si tu préfère). First() quant à lui, te retourne simplement l'objet.

Il faudrait que tu créer une route /user/edit/{id} qui te permettra de le récupérer dans ton controller et ensuite de t'en servir pour ta requête. Par exemple :

public function edit($id){
        $user = User::whereId($id)->first();
        return view('user.modif', compact('user'));
}

Ensuite, idem pour ton update. Tu ne peux appeler directement un Model::update... Il te faut dans un premier temps le récupérer, et ensuite faire un update sur l'objet reçu. Je te laisse fouiller un peu les ressources du net pour cette partie. En tout cas, essai de bien comprendre le principe du model MVC avec le système de Model et je pense que ça ira tout seul par la suite. Si tu ne vois toujours pas, la Doc de Laravel est très complète, et les tutos de Grafikart sur laravel, malgré leur ancienneté, fonctionne toujours sur beaucoup de points.

Toute est dans l'erreur ^^ Undefined property: Illuminate\Database\Eloquent\Collection::$id

iGenezys
Auteur

Et je viens justement ici pour comprendre d'où elle sort, et comment la réparer, parce que mon $id est censé renvoyer 1 là ^^

iGenezys
Auteur

Bonjour, merci pour ta réponse. Je vais essayer de le faire dans ce sens dans ce cas là ^^
Juste un petit truc qui me chiffone :
"Il faudrait que tu créer une route /user/edit/{id} qui te permettra de le récupérer dans ton controller et ensuite de t'en servir pour ta requête."

Quand je clique sur le bouton modifier l'url est comme ceci : http://localhost/laravelprojetpneu/public/gestionUser/1/edit

Le 1 correspond à l'id de l'utilisateur, et change en fonction de l'utilisateur que je choisis, du coup est-ce que cela revient à ce que tu m'as dis ?

Juste quelque chose qui me passait par la tête ^^

Oui c'est exactement ça. Il faut juste que ta route utilise bien ce système de variable /maroute/{mavariable}, ainsi, dans la méthode du controller concerné, tu peux faire :

public function maMethode($maVariable){
    dd($maVariable);
}

Ce code va debug la variable passé dans l'URL, tu pourras donc t'en servir pour effectuer les requêtes nécessaires :)

iGenezys
Auteur

Ok, je vais bosser sur tout ça, merci beaucoup ! :)