SQLSTATE [HY000]:常规错误:1364字段'name'没有默认值laravel 5.5

Dav*_*hez 2 php mysql laravel-5

我正在和Laravel一起盯着我试图制作一个简单的插件时遇到麻烦,但似乎我的所有可填写字段都没有包括在内.这是错误:

SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value 
(SQL: insert into `addresses` (`updated_at`, `created_at`) 
values (2017-12-25 09:31:49, 2017-12-25 09:31:49))
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,只有created_atupdated_at即将被插入,我想也许我忘记了我的fillable变种,但这是我的模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Addresses extends Model
{

protected $fillable = [
    'name',
    'city',
    'suburb',
    'street',
    'o_number',
    'i_number',
    'postal_code',
    'phone_s',
    'email_s',
    'google_map',
    'customer_id'
];

}
Run Code Online (Sandbox Code Playgroud)

和控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Addresses;
use App\Customers;

class AddressesController extends Controller
{
public function __construct()
{
    $this->middleware('auth');
}

public function store(Request $request){

    $create = Addresses::create([
        'name' => request('name'),
        'city' => request('city'),
        'suburb' => request('suburb'),
        'street' => request('street'),
        'o_number' => request('o_number'),
        'i_number' => request('i_number'),
        'postal_code' => request('postal_code'),
        'phone_s' => request('phone_s'),
        'email_s' => request('email_s'),
        'google_map' => request('google_map'),
        'customer_id' => Customers::where('code',$request->session()->get('customer_code'))->first()->id
    ]);

    $success = $create ? $request->session()->flash('success', '¡Registro exitoso!') : $request->session()->flash('success', 'Ooops! Algo salio mal :(');

    return redirect('addresses/'.$request->session()->get('customer_code'));
 }
}
Run Code Online (Sandbox Code Playgroud)

回应request()价值观的作品!所以我现在想念,我还有其他一些模型和控制器以同样的方式工作.请帮忙!

小智 13

转到“phpmyadmin”>>“变量”,然后找到“sql_mode”编辑并删除“STRICT_ALL_TABLES 或 STRICT_TRANS_TABLES”

它对我有用。希望对大家有帮助。

在此输入图像描述


MD4*_*D40 11

这是这个问题的迟到答案,但可能对其他人有帮助。此错误可能是由于模态中 $fillable 数据错误而发生的。您可以尝试使用

protected $guarded = []
Run Code Online (Sandbox Code Playgroud)

代替

protected $fillable = [
    'name',
    'city',
    'suburb',
    'street',
    'o_number',
    'i_number',
    'postal_code',
    'phone_s',
    'email_s',
    'google_map',
    'customer_id'
];
Run Code Online (Sandbox Code Playgroud)

但是您必须验证在控制器中传递的数据。


小智 8

此错误显示是因为您的数据库需要NAME字段.尝试编辑迁移脚本并将默认值放在此字段上或使其可为空.

例如.

$table->string('name')->nullable();

要么

$table->string('name')->default('');

然后运行迁移刷新.