Laravel 6

Rajouter des éléments dans ma base de données

Avatar de mr_debutant
mr_debutant

Bonjour à tous,

Je suis actuellement en train de développer un site en laravel et j'ai un espace membre et dans cet espace membre j'ai une page ou l'utilisateur peut ajouter des élements tels que son numéro, son adresse etc

Je voudrais que ces élements soit intégrer dans ma table users qui contient deja le nom, le prénom, l'email etc .. fournis lors de l'inscription.

Ainsi ma question est comment je pourrais faire pour ajouter ces valeurs.

J'ai cette fonction ci dans mon controller, cependant, elle m'affiche pas d'erreur mais y a rien qui est enregistrer dans ma table user :

public function create()
{
    User::firstOrNew([
        'numero' => request('numero'),
        'type_de_la_voie' => request('type_rue'),
        'nom_de_la_voie' => request('nom_rue'),
        'ville' => request('ville'),
        'code_postale' => request('code_postale'),
        'region' => request('region'),
        'numero_tel' => request('numero_tel')
    ]);
     
    return redirect('/mon-compte')->with('success', 'Vos coordonnées ont bien été mis à jour');
}

Et dans mon model User, j'ai cela pour ma variable $fillable :

    protected $fillable = [
        'nom','prenom', 'email', 'password', 'confirmation_token','numero', 'type_de_la_voie', 'nom_de_la_voie', 'code_postale', 'ville', 'region', 'numero_tel',  
    ];

Et mon formulaire resemble à cela :

<form method="POST" action="{{ route('auth.adresse.create') }}" class="form_adresse">
                                @csrf
                                <input class = "nom_inscription margin_adresse" type="number" name="numero" required placeholder="Numéro de votre domicile" value="">

                                    <input class = "nom_inscription" type="number" name="code_postale" required placeholder="Code Postale" value=""><br>
                                    <select class = "type_rue_adresse margin_adresse" name="type_rue"  required value="">
                                        <option name="type_rue" value="">Choisissez le type de votre voie </option>
                                        <option name="type_rue" class="choisir_region_adresse" value="Rue"> Rue </option>
                                        <option name="type_rue" class="choisir_region_adresse" value="Avenue"> Avenue</option>
                                        <option name="type_rue" class="choisir_region_adresse" value="Boulevard"> Boulevard</option>
                                    </select>
                                        <input class = "nom_inscription" type="text" name="ville" placeholder="Ville" value="" required><br>
                                        <input class = "nom_inscription margin_adresse" type="text" name="nom_rue" placeholder="Nom de votre voie" value="" required>
                                        <select class = "type_rue_adresse"  name="region" required>
                                            <option name="region" value=""> Choissisez une région </option> 
                                            <option name="region" class="choisir_region_adresse" value="Auvergne-Rhône-Alpes"> Auvergne-Rhône-Alpes </option> 
                                            <option name="region" class="choisir_region_adresse" value="Bourgogne-Franche-Comté"> Bourgogne-Franche-Comté</option>
                                            <option name="region" class="choisir_region_adresse" value="Bretagne"> Bretagne</option>
                                            <option name="region" class="choisir_region_adresse" value="Centre-Val de Loire"> Centre-Val de Loire</option>
                                            <option name="region" class="choisir_region_adresse" value="Corse"> Corse</option>
                                            <option name="region" class="choisir_region_adresse" value="Grand Est"> Grand Est</option>
                                            <option name="region" class="choisir_region_adresse" value="Guadeloupe"> Guadeloupe</option>
                                            <option name="region" class="choisir_region_adresse" value="Guyane"> Guyane</option>
                                            <option name="region" class="choisir_region_adresse" value="Hauts-de-France"> Hauts-de-France</option>
                                            <option name="region" class="choisir_region_adresse" value="Île-de-France"> Île-de-France</option>
                                            <option name="region" class="choisir_region_adresse" value="Martinique"> Martinique</option>
                                            <option name="region" class="choisir_region_adresse" value="Mayotte"> Mayotte</option>
                                            <option name="region" class="choisir_region_adresse" value="Normandie"> Normandie</option>
                                            <option name="region" class="choisir_region_adresse" value="Nouvelle-Aquitaine"> Nouvelle-Aquitaine</option>
                                            <option name="region" class="choisir_region_adresse" value="Occitanie"> Occitanie</option>
                                            <option name="region" class="choisir_region_adresse" value="Pays de la Loire"> Pays de la Loire</option>
                                            <option name="region" class="choisir_region_adresse" value="Provence-Alpes-Côte d'Azur"> Provence-Alpes-Côte d'Azur</option>
                                            <option name="region" class="choisir_region_adresse" value="La Réunion"> La Réunion</option>
                                        </select><br>                                    
                                        <input class = "nom_inscription" type="number" name="numero_tel" required placeholder="Numero de téléphone" value=""><br>
                                    <button class="valider_adresse" type="submit">Valider</button>
                                </form>

Si quelqu'un pourrait m'aider ça serait vraiment sympa ^^

Merci d'avance !!

Posté il y a 1 mois
Avatar de nash
nash

Salut,

Il manque la condition pour le first

$user = Model::firstOrNew(
    ['Champ' => 'value'], <- First ou si tu prefere where
    [....] <-OrNew
);

De plus ton user est certainement deja crée. donc un simple update suffira

Posté il y a 1 mois
Avatar de mr_debutant
mr_debutant

Ducoup si j'ai bien compris j'aurais une fonction de ce style ? :

public function create()
{
    User::firstOrNew([
        'numero' => request('numero'),
        'type_de_la_voie' => request('type_rue'),
        'nom_de_la_voie' => request('nom_rue'),
        'ville' => request('ville'),
        'code_postale' => request('code_postale'),
        'region' => request('region'),
        'numero_tel' => request('numero_tel')
    ], 
    [
        'numero' => request('numero'),
        'type_de_la_voie' => request('type_rue'),
        'nom_de_la_voie' => request('nom_rue'),
        'ville' => request('ville'),
        'code_postale' => request('code_postale'),
        'region' => request('region'),
        'numero_tel' => request('numero_tel')
    ]);
     
    return redirect('/mon-compte')->with('success', 'Vos coordonnées ont bien été mis à jour');
}
Posté il y a 1 mois
Avatar de nash
nash

non tu aurais plutot,

$user = Model::firstOrNew(
    ['id' => 'le userID'], 
    [
        'numero' => request('numero'),
        'type_de_la_voie' => request('type_rue'),
        'nom_de_la_voie' => request('nom_rue'),
        'ville' => request('ville'),
        'code_postale' => request('code_postale'),
        'region' => request('region'),
        'numero_tel' => request('numero_tel')
    ]
);

ATTENTION : firstOrNew = lire une ligne ou ajouter un nouvel enregistrement or dans ton cas le user existe deja

Posté il y a 1 mois
Avatar de mr_debutant
mr_debutant

Je viens de tester ce code, ça m'affiche aucune erreur et il m'affiche même le message de succès cependant, aucune donnée n'est enregistrée dans ma table Ahh d'accord j'avais vu dans la dicumentation laravel cette fonction et je pensais qu'elle correspondrait à ce que je voulais faire

En fait ce que je voudrais moi, ça serait de soit modifier les coordoonés s'il existe ou bien de les ajouter s'il n'existe pas

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

Salut,

Quel ID tu lui envoie à la place de 'le userID' ? Et n'existe-t-il pas déjà, comme l'a supposé nash ?

Ex: id = 8 et il y a déjà un user avec l'ID 8 dans ta base.

Je ne suis pas certain que la methode firstOrNew soit la plus adaptée. Tu veux faire quoi en fait ? Création, update, autre ? firstOrNew c'est special (sur un ID d'ailleurs je trouve ça étrange, je l'aurais plutôt fait sur un email ou un username). En l'occurence ce firstOrNew veut dire:

je vais chercher le premier user ayant l'ID 8 ou alors je crée ce user

(qui n'aura pas forcement l'ID 8 en plus selon ton code)

Edit: je viens de voir que tu as modifié ton message. Donc ce que tu veux faire c'est plutôt

$User = User::find($id);

$User->numero => request('numero');
$User->type_de_la_voie => request('type_rue');
$User->nom_de_la_voie => request('nom_rue');
$User->ville => request('ville');
$User->code_postale => request('code_postale');
$User->region => request('region');
$User->numero_tel => request('numero_tel')

$User->save();

Un truc du genre ($id étant l'id de ton user, tu t'en doute)

Posté il y a 1 mois
Avatar de mr_debutant
mr_debutant

A la place de user ID je met : Auth()->user()->id ah d'accord, en fait moi ce que je voudrais mettre en place, ça serait une page pour l'utlisateur et sur cette page il peut ajouter ses coordonnées si elle existe pas ou bien il peut les modifier si elle existe déjà. Et les coordonnées ajouter ce retrouveront dans la table User ou il y a déjà le nom, le prénom, l'adresse mail et le mot de passe déjà fournis lors de son inscription. En tout cas merci de me consacrer un peu de votre temps, c'est grv sympa ^^

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

Ouai donc :

$User = User::find(Auth()->user()->id);

$User->numero => request('numero');
$User->type_de_la_voie => request('type_rue');
$User->nom_de_la_voie => request('nom_rue');
$User->ville => request('ville');
$User->code_postale => request('code_postale');
$User->region => request('region');
$User->numero_tel => request('numero_tel')

$User->save();

Ca devrait fait l'affaire.

Posté il y a 1 mois
Avatar de mr_debutant
mr_debutant

je viens de voir ton message, j'ai mis ce que tu m'as écrit mais y a la 2ème ligne qui est souligner en rouge pour je ne sais quelle raison ..

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

Ok non c'est moi qui suis neuneu:

$User = User::find(Auth()->user()->id);

$User->numero = request('numero');
$User->type_de_la_voie = request('type_rue');
$User->nom_de_la_voie = request('nom_rue');
$User->ville = request('ville');
$User->code_postale = request('code_postale');
$User->region = request('region');
$User->numero_tel = request('numero_tel');

$User->save();

C'est des = pas des =>

Et on n'oublie pas le dernier ; au tel

Posté il y a 1 mois
Avatar de mr_debutant
mr_debutant

YESSSSSSSS CA MARCHEEEEE !!!!!! JE TE REMERCIE INFINIMENT !!!!! ça faisait depuis 2 jours que j'étais bloqué sur ce truc et la tu viens de me sauver !!!

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

Super alors. Tu peux passer le sujet en résolu. Pense à prendre le temps de regarder le nom des methodes que tu utilise: ex: firstOrNew, on comprends bien qu'on veut le premier de quelque chose ou alors on le crée s'il n'existe pas.

Posté il y a 1 mois
Avatar de mr_debutant
mr_debutant

D'accord, je prends note de ta refléxion ^^ Encore merci !

Posté il y a 1 mois
Avatar de nash
nash

De mon coté je ferais plus un :

$user = Auth()->user();
$user->update([
        'numero' => request('numero'),
        'type_de_la_voie' => request('type_rue'),
        'nom_de_la_voie' => request('nom_rue'),
        'ville' => request('ville'),
        'code_postale' => request('code_postale'),
        'region' => request('region'),
        'numero_tel' => request('numero_tel')
    ])

tu peux meme pousser la question avec un :

public function create(Request $request)
{
    $request->user()->update([
        'numero' => request('numero'),
        'type_de_la_voie' => request('type_rue'),
        'nom_de_la_voie' => request('nom_rue'),
        'ville' => request('ville'),
        'code_postale' => request('code_postale'),
        'region' => request('region'),
        'numero_tel' => request('numero_tel')
    ])
}
Posté il y a 1 mois
Avatar de bestmomo
bestmomo

Salut,

Ca serait encore plus simple s'il y avait concordance entre les noms des champs de formulaire et les noms des colonnes de la table.

Posté il y a 1 mois
Avatar de nash
nash

Ca serait encore plus simple s'il y a avait concordance entre les noms des champs de formulaire et les noms des colonnes de la table.

Je ne souleve meme pas le probleme

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.