質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

usertableのupdate時に挿入データがnullになってしまう。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 115

m.kk

score 7

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">&times;</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文の理解が足りてないことが要因になっています。
恐れ入りますが、よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

解決しました。。

$user->userUpdate($user->id, $data);

なんで$usr->idなんか書いてるんだ。。?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る