web-dev-qa-db-ja.com

laravel-5.4-エラー:空の値からデフォルトのオブジェクトを作成しています

データベースに画像パスを保存したい。コントローラーコードunder _vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php_は次のとおりです。

_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());
}
_

次のエラーが表示されます:RegistersUsers.php行40のErrorException:空の値からのデフォルトオブジェクトの作成 enter image description here

画像はパブリックフォルダーに保存されますが、ユーザーテーブルデータベースに画像パスを保存できません。ユーザー表のスキーマ
Schema::create('users', function (Blueprint $table) { $table->increments('user_id'); $table->string('name'); $table->string('image'); $table->rememberToken(); $table->timestamps();

データベースのユーザーテーブルにイメージパスを保存する方法

6
dynamic

変数$userを初期化していないため、コントローラーで使用する前に、$user = new User;が既にあると仮定してuse App\User;を追加する必要があります。

または、$user = new \App\User;しない場合。

更新既存のユーザーレコードを更新しようとしている場合は、$user変数を初期化する必要があります。のような:

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

以下の簡単な方法を使用します。

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

これは、サブテーブルのIDに外部キーがあり、更新プロセスで明示的に定義する必要がある複数のテーブルを更新するときにも簡単です。

また、$user = User::find($id);は、通常、_$id_がそのオブジェクトテーブルの主キーである場合に機能します。

1
Jose Mhlanga