firstOrCreate () не вставляет и не обновляет - PullRequest
0 голосов
/ 01 июля 2018

Я хочу попробовать обновить мой столбец таблицы, если столбец таблицы не существует, то я хочу создать новый столбец, а затем обновить эту строку. Но он отправил мне эту ошибку, как показано ниже:

SQLSTATE [HY000]: общая ошибка: 1364 Поле 'option_value' не иметь значение по умолчанию (SQL: вставить в admins (option_name, updated_at, created_at) значения (покупка_доставка, 2018-07-01 19:31:31, 2018-07-01 19:31:31))

public function update(Request $request)
{
    //
    //dd($request->input());

    $admin = Admin::firstOrCreate(['option_name' => 'tag']);
    $admin->option_value=$request->tag;
    $admin->save();
    $admin = Admin::firstOrCreate(['option_name' => 'review']);
    $admin->option_value=$request->review;
    $admin->save();
    $admin = Admin::firstOrCreate(['option_name' => 'purchase_delivery']);
    $admin->option_value=$request->purchase_delivery;
    $admin->save();
    $admin = Admin::firstOrCreate(['option_name' => 'replace_policy']);
    $admin->option_value=$request->replace_policy;
    $admin->save();
    return redirect()->route('admin.settings')
        ->with('success', 'Setting saved successfully');
}

Код HTML:

                        <div class="col-sm-4">
                            <select name="tag" style="margin-bottom:15px;" class="form-control">
                                <option value="1" {{$tag !=null ?($tag->first()->option_value==1 ?'selected':''):('')}}>On</option>
                                <option value="0" {{$tag !=null ?($tag->first()->option_value==0 ?'selected':''):('')}}>Off</option>
                            </select>
                        </div>
                        <div class="col-sm-2">
                            <label class="control-label">Review System</label>
                        </div>

                        <div class="col-sm-4">
                            <select name="review" style="margin-bottom:15px;" class="form-control">
                                <option value="1" {{$review !=null ?($review->first()->option_value==1 ?'selected':''):('')}}>On</option>
                                <option value="0" {{$review !=null ?($review->first()->option_value==0 ?'selected':''):('')}}>Off</option>
                            </select>
                        </div>
<textarea name="purchase_delivery" id="summernote_1">{!!$purchase_delivery !=null ? $purchase_delivery->first()->option_value :''!!}</textarea>
<textarea name="replace_policy" id="summernote_2">{!!$replace_policy !=null ? $replace_policy->first()->option_value :''!!}</textarea>

1 Ответ

0 голосов
/ 01 июля 2018

Это поле, option_value, нуждается в значении.

Вы устанавливаете значение только для option_name при этом:

Admin::firstOrCreate(['option_name' => 'replace_policy']);

Вам нужно будет передать некоторое значение для option_value:

Admin::firstOrCreate(
    ['option_name' => 'replace_policy'],
    ['option_value' => 'some value']
);

Первый аргумент - это то, что он будет использовать для построения запроса WHERE. Второй аргумент - это значения, используемые при создании модели (они объединяются с массивом WHERE). Для этого необходимо заполнить оба поля.

OR

Сделайте это поле nullable в схеме, если оно действительно не имеет значения при создании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...