userデータのedit機能を作成しております。
データを挿入が弾かれてしまい。
デバックすると、データがnullで返されてました。
どなたかご教授お願いいたします。
Argument 1 passed to App\Models\User::userUpdate() must be of the type array, int given, called in
デバック外したらint型で送られているようです。
配列で送れるように
調べています。
view @push('cropper') <link href="{{ asset('css/cropper-custom.css') }}" rel="stylesheet"> <link href="{{ asset('css/profile_edit.css') }}" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.6/cropper.min.css" rel="stylesheet"> <script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.6/cropper.min.js"></script> <script src="{{ asset('js/cropper-custom.js') }}" defer></script> @endpush @extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-10"> <div class="card"> <div class="card-header">プロフィールを編集</div> <div class="card-body"> {{-- <form action="{{ route('books.update',$books->id)}}" method="POST" enctype="multipart/form-data"> --}} <form method="POST" action="{{route('users.update' ,$user->id) }}" enctype="multipart/form-data"> @csrf @method('PUT') <div class="form-group row"> <label for="profile_image" class="col-md-4 col-form-label text-md-right">プロフィール画像</label> <div class="col-md-6 py-2"> <label class="label" data-toggle="tooltip" title="画像を追加する"> <div id="display_cropped_image" class="border position-relative square-frame"> <span id="avatar" class="square_content bg-image rounded" style="background-image:url('{{ asset($user->profile_image) }}')"> <i id="avatar_plus" class="fas fa-plus fa-2x text-secondary position-absolute h-100 w-100 m-0 d-flex align-items-center justify-content-center"></i> </span> </div> <input type="file" id="input" name="book_image" accept="image/*"> </label> </div> <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="modalLabel">Crop the image</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <div class="img-container"> <img id="image" src=""> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button> <button type="button" class="btn btn-primary" id="crop">Crop</button> </div> </div> </div> </div> @error('profile_image') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> <div class="form-group row"> <label for="screen_name" class="col-md-4 col-form-label text-md-right">ユーザー名</label> <div class="col-md-6"> <input id="screen_name" type="text" class="form-control @error('screen_name') is-invalid @enderror" name="screen_name" value="{{ $user->screen_name }}" required autocomplete="screen_name" autofocus> @error('screen_name') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <lavel for="name" class="col-md-4 col-form-label text-md-right">名前</lavel> <div class="col-md-6"> <input id="name" type="text" class="form-control @error('name') is-valid @enderror" name="name" value="{{ $user->name }}" required autocomplete="name" autofocus> @error('name') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address' )}}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ $user->email }}" required autocomplete="email"> @error('email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="email" class="col-md-4 col-form-label text-md-right">自己紹介</label> <div class="col-md-6"> <textarea name="self_introduction" id="self_introduction" class="form-control @error('self_introduction') is-invalid @enderror" cols="30" rows="10">{{ $user->self_introduction }}</textarea> @error('email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row mb-0"> <div class="col-md-6 offset-md-4"> <button type="submit" class="btn btn-primary">更新する</button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection
controller public function edit(User $user) { $user = auth()->user(); return view('users.edit', ['user' => $user]); } public function update(Request $request, User $user) { $user = User::find(Auth::user()->id); $data = $request->all(); $validator = Validator::make($data, [ #0-9,英数字,記号の_のみだけ登録できるよう設定 'screen_name' => ['required', 'regex:/^(\w)+$/', 'max:50', Rule::unique('users')->ignore($user->id)], 'name' => ['required', 'string', 'max:255'], 'profile_image' => ['file', 'image', 'mimes:jpeg,png,jpg', 'max:2048'], 'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users')->ignore($user->id)] ]); dd($user); $validator->validate(); $user->userUpdate($user->id, $data); return redirect('users/' . $user->id); }
上のuserUpdateメソッドをモデルに記載してます。
model class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'screen_name', 'name', 'email', 'password', 'profile_image' ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function getAllUsers($user_id){ return $this->where('id', '<>', $user_id)->paginate(6); } public function userUpdate(Array $params) { if(isset($params['profile_image'])){ $this::where('id', $this->id) ->update([ 'screen_name' => $params['screen_name'], 'name' => $params['name'], 'self_introduction' => $params['self_introduction'], 'profile_image' => $params['profile_name'], 'email' => $params['email'], ]); } else { $this::where('id', $this->id) ->update([ 'screen_name' => $params['screen_name'], 'name' => $params['name'], 'self_introduction' => $params['self_introduction'], 'email' => $params['email'], ]); } return; } }
ここで更新時に画像があるなしでif文を使っております。
whereで更新idを指定しupdateメソッドへ、の流れでやっておりますがうまくいきません。
modelのuserUpdateの記述がおかしいと考えており、自分のsql文の理解が足りてないことが要因になっています。
恐れ入りますが、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。