web-dev-qa-db-fra.com

laravel-5.4 - erreur: création d'un objet par défaut à partir d'une valeur vide

Je veux stocker le chemin de l'image dans la base de données. Mon code de contrôleur sous vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php Suit:

public function register(Request $request)
{
    $this->validator($request->all())->validate();

    if($request->hasFile('image')) {
    $image_name = $request->file('image')->getClientOriginalName();              
    $image_path = $request->file('image')->store('public'); 
    $user->image = Storage::url($image_name);
    $user->save();
    }

    event(new Registered($user = $this->create($request->all())));

   // $this->guard()->login($user); disable autologin for new users

    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath());
}

J'obtiens l'erreur suivante: ErrorException dans RegistersUsers.php ligne 40: création d'un objet par défaut à partir d'une valeur vide enter image description here .

L'image est enregistrée dans le dossier public mais ne peut pas enregistrer le chemin de l'image dans la base de données de la table utilisateur. schéma de la table utilisateur
Schema::create('users', function (Blueprint $table) { $table->increments('user_id'); $table->string('name'); $table->string('image'); $table->rememberToken(); $table->timestamps();

comment procéder pour stocker le chemin de l'image dans la table utilisateur dans la base de données

6
dynamic

vous n'avez pas initialisé la variable $user donc dans le contrôleur et avant de l'utiliser, vous devez ajouter $user = new User; en supposant que vous avez déjà use App\User;

ou $user = new \App\User; si vous ne le faites pas.

pdate si vous essayez de mettre à jour un enregistrement utilisateur existant, vous devez initialiser le $user variable en sélectionnant en fonction de sa clé primaire qui doit être envoyée dans la demande, puis en effectuant l'initialisation comme:

$user_id = $request->input('user_id');
$user = User::find($user_id);
8
M.Elwan

Utilisez le moyen simple ci-dessous:

$user = User::where('id', '=', $id)->first(); // where id is method param from url or request object
$user->save();

Ceci est également plus facile lors de la mise à jour de plusieurs tables où les identifiants dans les sous-tables ont des clés étrangères et doivent être explicitement définis dans le processus de mise à jour.

De plus, $user = User::find($id); fonctionne normalement où $id Est la clé primaire de cette table d'objets

1
Jose Mhlanga