Je souhaite ajouter d'autres détails pour les utilisateurs et j'ai créé des champs supplémentaires dans mon enregistrement, ce qui ressemble à ceci:

<h1>Other Details</h1>

    <div class="form-group{{ $errors->has('phone') ? ' has-error' : '' }}">
        <input id="phone" type="text" class="form-control" name="phone"  placeholder="phone number" />
        @if ($errors->has('phone'))
            <span class="help-block">
                <strong>{{ $errors->first('phone') }}</strong>
            </span>
        @endif
    </div>

    <div class="form-group{{ $errors->has('address') ? ' has-error' : '' }}">
        <textarea name="address" id="address" placeholder="your address" class="form-control"></textarea>
        @if ($errors->has('address'))
            <span class="help-block">
                <strong>{{ $errors->first('address') }}</strong>
            </span>
        @endif
    </div>

Ensuite, dans RegisterController, j'ai ajouté ces champs dans la validation:

protected function validator(array $data)
    {
        return Validator::make($data, [
            'lastname'  =>  'required|max:255',
            'firstname' =>  'required|max:255',
            'username'  =>  'required|max:16|unique:users',
            'email'     =>  'required|email|max:255|unique:users',
            'password'  =>  'required|min:6|confirmed',

            'phone'     =>  'required',
            'address'   =>  'required'

        ]);
    }

Ensuite, dans la partie de validation, je n'ai aucun problème, mais en enregistrant dans la table, je ne sais pas comment puis-je obtenir l'ID utilisateur inséré.

J'ai créé une migration pour le profil comme ceci:

 public function up()
    {
        Schema::create('user_profile', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user_id');
            $table->string('phone');
            $table->text('address');
            $table->timestamps();

            $table->foreign('user_id')
                    ->references('id')
                    ->on('users')
                    ->onDelete('cascade');
        });
    }

Ensuite, j'ai également créé un modèle pour le profil utilisateur

class UserProfile extends Model
{
    protected $table = 'user_profile';

    public function user() {
        return $this->belongsTo('App\User');
    }
}

Ensuite, dans mon modèle utilisateur, j'ai également ajouté la relation:

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'username',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function profile() {
         return $this->hasOne('App\UserProfile');
    }

}

Ensuite, mon problème est dans la sauvegarde du profil. Parce que dans RegisterController, je n'ai que ceci:

 protected function create(array $data)
    {
        return User::create([
            'name'      =>  title_case($data['lastname']) . ' ' . title_case($data['firstname']),
            'username'  =>  $data['username'],
            'email'     =>  $data['email'],
            'password'  =>  bcrypt($data['password']),
        ]);
    }

Comment puis-je ajouter mes autres détails? Je suis encore nouveau à Laravel.

0
Jerielle 27 janv. 2017 à 09:00

4 réponses

Meilleure réponse

Un utilisateur a un profil_utilisateur Vous pouvez vous référer à ceci: https: // laravel. com / docs / 5.3 / eloquent-relations # inserting-and-update-related-models

Essayez cette approche:

$user = new User();
$user->name = 'John Doe';
// rest of the user details
$user->save();

// You can get INSERTED USER_ID
$inserted_user_id = $user->id

// Or you can update user_profile
// without your INSERTED USER_ID very simple
$profile = new Profile();
$profile->address1 = 'Some address';
// rest of address details

$user->profile()->save($profile);
// this is working fine
1
Jonny Vu 20 sept. 2017 à 15:30

Essayez quelque chose comme ceci:

$user = new User();        

$user->name = 'John';  

$user->save();

// Now Getting The Last inserted id

$insertedId = $user->id;

echo $insertedId ;

Edit: Modifiez cette ligne:

Return User :: create (...)

À

$ utilisateur = Utilisateur :: créer (...)

Et retour

$user or $user->id;

Mais vérifiez si la sauvegarde a réussi ou non.

2
Mayank Pandeyz 27 janv. 2017 à 06:14
 protected function create(array $data)
{

 $user = User::create([
        'name'      =>  title_case($data['lastname']) . ' ' . title_case($data['firstname']),
        'username'  =>  $data['username'],
        'email'     =>  $data['email'],
        'password'  =>  bcrypt($data['password']),
    ]);


 Profile::create([
        'user_id' => $user->id,  
        'phone' => '',
        'address' => '',
    ]);
return $user

}

OU vous pouvez utiliser $user->userInfo()

$user->userInfo()->save(Profile::create([
        'user_id' => $user->id,  
        'phone' => '',
        'address' => '',
//whatever information you need to save to the userInfo table - if any
]));

Laravel Création de la table de base de données userInfo lors de l'inscription de l'utilisateur

1
Community 23 mai 2017 à 12:01

Je pense que votre code doit être mis à jour comme:

protected function create(array $data)
{
 $userId = DB::table('users')->insertGetId(array(
   'name'      =>  title_case($data['lastname']) . ' ' . title_case($data['firstname']),
   'username'  =>  $data['username'],
   'email'     =>  $data['email'],
   'password'  =>  bcrypt($data['password']),


 ));

 echo $userId;

}

J'espère que ce travail pour vous!

1
AddWeb Solution Pvt Ltd 27 janv. 2017 à 06:38