Редактирование информации о пользователе с помощью laravel

Я создал интерфейс cms для администратора на своем веб-сайте. среди прочего администратор может добавлять\редактировать информацию о пользователях с помощью форм. когда я отправляю форму редактирования, я продолжаю получать эту ошибку: Column not found: 1054 Unknown column 'updated_at' in 'field list', которая предполагает, что обновление БД пытается сохранить все индексы запросов (которые содержат значения столбцов из другой таблицы), а не только тот, который я пытаюсь обновить.

Мне удалось отследить проблему до одной строки $user_role->save();. строки выше, которые делают то, что они предполагают (находят правильную user_role и изменяют ее значение).

Вот мой код

Модель

static public function update_user($request, $id){
        
        $image_name = '';

        if( !empty($request['profile_image']) && $request->hasFile('profile_image') && $request->file('profile_image')->isValid() ){

            $file = $request->file('profile_image');
            $image_name = date('Y.m.d.H.i.s') . '-' . $file->getClientOriginalName();
            $request->file('profile_image')->move( public_path() . '/images/profile-images/' , $image_name);
            $img = Image::make( public_path() . '/images/profile-images/' . $image_name );
            $img->resize(370, null, function ($constraint) {
                $constraint->aspectRatio();
            });
            $img->save();

        }
        $user = self::find($id);
        $user->name = $request['name'];
        $user->email = $request['email'];
        $user->phone = $request['phone'];
        if( !empty($request['password']) ){
            $user->password = bcrypt($request['password']);
        }
        if(!empty($image_name)){
            $user->profile_image = $image_name;
        }
        if( !empty($request['role_id']) ){
            $user_role = Users_role::find($id);
            $user_role->role_id = $request['role_id'];
            $user_role->save();
        }
        $user->save();
        Session::flash('sm', 'Your profile has been updated');
        Session::flash('sm-position', 'toast-top-center');
        Session::put('user_name', $request['name']);
    }

Просмотреть

<div class="row">
    <div class="span9">
        <div class="content">
            <div class="module message">
                <div class="module-head">
                    <h3><b>Edit Product</b></h3>
                </div><br>
                    <div class="content">
                        <div class="module message">
                            <div class="module-body">
                                    <form action="{{ url('cms/users/' . $user->id) }}" method="POST" novalidate="novalidate" autocomplete="off" enctype="multipart/form-data">
                                        <div class="module-body">
                                            @method('PUT')
                                            @csrf
                                            <input type="hidden" name="user_id" value="{{ $user->id}}">
                                    <div class="form-group">
                                        <div class="input-group mb-3">
                                            <div class="w-100 field-input-cms">
                                                <label for="category-id" class="input-group-text h-50"><span class="text-danger">*</span><b> Permissions:</b></label>
                                                <select name="role_id" class="custom-select span-8">
                                                    <option @if ( $user->role_id == 8 ) selected="selected" @endif value="8">Admin</option>
                                                    <option @if ( $user->role_id == 2 ) selected="selected" @endif value="2">Regular</option>
                                                </select>
                                            </div>
                                            <small class="text-muted help-text">Please select one option</small><br>
                                            <span class="text-danger">&nbsp; {{ $errors->first('category_id') }}</span>
                                        </div>
                                        <div class="w-100 field-input-cms">
                                            <label for="name" class="input-group-text h-100"><span class="text-danger">*</span><b> Name:</b></label>        
                                            <input type="text" value="{{ $user->name }}" name="name" style="width:100%" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
                                        </div>
                                        <small class="text-muted help-text">Name of user</small><br>
                                        <span class="text-danger">&nbsp; {{ $errors->first('name') }}</span>
                                        <div class="field-input-cms w-100">
                                            <label for="email" class="input-group-text"><span class="text-danger">*</span><b> Email:</b></label>        
                                            <input type="text" value="{{ $user->email }}" name="email" size="120" class="form-control mw-100" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
                                        </div>
                                        <small class="text-muted text-balck help-text"> Email of user</small><br>
                                        <span class="text-danger">&nbsp; {{ $errors->first('email') }}</span>
                                        <div class="field-input-cms w-100">
                                            <label for="phone" class="input-group-text"><span class="text-danger">*</span><b> Phone:</b></label>        
                                            <input type="text" value="{{ $user->phone }}" name="phone" size="120" class="form-control mw-100" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
                                        </div>
                                        <small class="text-muted text-balck help-text"> Phone number of user</small><br>
                                        <span class="text-danger">&nbsp; {{ $errors->first('phone') }}</span>
                                            <div class="input-group mb-3">
                                                <div class="input-group-prepend">
                                                    <span class="input-group-text" id="inputGroupFileAddon01">Upload</span>
                                                </div>
                                                <div class="custom-file">
                                                    <input type="file" name="profile_image" class="custom-file-input" id="inputGroupFile01" aria-describedby="inputGroupFileAddon01">
                                                    <label class="custom-file-label" name="profile_image" for="inputGroupFile01">Choose file</label>
                                                </div>
                                            </div>
                                            <small class="text-muted help-text">Image must be: jpg, jpeg, png, gif. Max: 5mb</small><br>
                                            <span class="text-danger">&nbsp; {{ $errors->first('profile_image') }}</span>
                                        </div>
                                        <div class="form-group">
                                            <img id="cms-profile-image" src="{{ asset('images/' . $user->profile_image) }}" >
                                        </div><br>
                                        <a class="btn btn-inverse" href="{{ url('cms/users') }}">Cancel</a>
                                        <input type="submit" value="Save Product" name="submit" class="btn btn-primary">
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
            </div>        
        </div> <!--/.content-->
    </div><!--/.span9-->
</div>

Изображение ошибки, выданной laravel

введите здесь описание изображения

Я должен упомянуть, что если я закомментирую этот код:

        if( !empty($request['role_id']) ){
            $user_role = Users_role::find($id);
            $user_role->role_id = $request['role_id'];
            $user_role->update();
        }
all the values are saved correctly.


person TheProphet    schedule 27.09.2018    source источник


Ответы (1)


Если в вашей таблице users нет столбцов created_at и updated_at, вы должны установить:

public $timestamps = false;

в вашей модели User.

Laravel по умолчанию предполагает, что у вас есть эти поля для таблиц. Поэтому всякий раз, когда запись создается/обновляется, она автоматически устанавливает/обновляет эти поля.

В качестве альтернативы вы можете обновить структуру своей таблицы, чтобы добавить эти поля, и тогда эти поля будут автоматически обрабатываться Laravel (в этом случае не устанавливайте timestamps в false).

Возможно, вам будет интересно прочитать об соглашениях Eloquent.

person Marcin Nabiałek    schedule 27.09.2018