【问题标题】:SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value laravel 5.5SQLSTATE [HY000]:一般错误:1364 字段“名称”没有默认值 laravel 5.5
【发布时间】:2018-06-07 01:06:23
【问题描述】:

我正在盯着 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))

如您所见,只有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'
];

}

还有控制器

<?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'));
 }
}

回显request() 值有效!所以我现在失踪了,我有一些其他的模型和控制器以同样的方式工作得很好。请帮忙!

【问题讨论】:

    标签: php mysql laravel-5


    【解决方案1】:

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

    例如。

    $table-&gt;string('name')-&gt;nullable();

    $table-&gt;string('name')-&gt;default('');

    然后运行迁移刷新。

    【讨论】:

    • 如果我这样做只在消息中进行更改:namecustomer_id,并且phone_s 这两个字段对于我的目的都是必需的,并且仍然没有插入任何内容
    • 嗯。我认为错误在于您调用 $request 方法的方式。尝试使用 $request->name、$request->city 等调用变量。
    • 我试过了,但还是同样的问题,就像我说的@jun drie 我有另一个控制器工作得很好,并且是用同样的方式编写的
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我使用save()解决了它

      $addresses = new Addresses;
      $customer_id = Customers::where('code',$request->session()->get('customer_code'))->first()->id;
      
          $addresses->name = $request->name;
          $addresses->city = $request->city;
          $addresses->suburb = $request->suburb;
          $addresses->street = $request->street;
          $addresses->o_number = $request->onumber;
          $addresses->i_number = $request->inumber;
          $addresses->postal_code = $request->postal_code;
          $addresses->phone_s = $request->phone_s;
          $addresses->email_s = $request->email_s;
          $addresses->google_map = $request->map;
          $addresses->customer_id = $customer_id;
      
          $success = $addresses->save() ? $request->session()->flash('success', '¡Registro exitoso!') : $request->session()->flash('success', 'Ooops! Algo salio mal :(');
      
          return redirect('addresses/'.$request->session()->get('customer_code'));
      

      一切正常

      【讨论】:

        【解决方案4】:

        该错误是由于MYSQL5.7的严格模式造成的。请在connections.mysql部分更改您的config/database.php,设置'strict' => false。

        【讨论】:

        • 这对我有用。但是请问这有什么安全隐患?
        • 这对我也有用
        【解决方案5】:

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

        protected $guarded = []
        

        而不是

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

        【讨论】:

        • 救命!我的 $fillable 数组中有一个愚蠢的错误。谢谢
        【解决方案6】:

        您可以在表结构中检查 Null 选项,如下所示 -

        【讨论】:

        • 好的,尝试在表结构中将默认值设置为空白。
        【解决方案7】:

        确保 request() 具有键 'name'。将 request('name') 替换为随机字符串,然后重试。

        【讨论】:

          猜你喜欢
          • 2019-05-06
          • 2018-10-19
          • 2020-09-12
          • 2018-03-01
          • 1970-01-01
          • 2020-05-25
          • 2021-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多