6
votes

I'm staring with Laravel and I'm having troubles trying to make a simple insert, but It seems that all of my fillable fields are not being included. This is the error:

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))

As you can see, only created_at and updated_at are about to be inserted, I thought that maybe I forgot my fillable vars, but this is my Model:

<?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'
];

}

And the Controller

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

Echo the request() values works! So I'm missing right now, I have some other Models and Controller working good in the same way. Please Help!

7

7 Answers

11
votes

This error show because you the NAME field is required on your database. Try to edit your migration script and put default value on this field or make it nullable.

eg.

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

OR

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

Then run a migration refresh.

4
votes

Goto "phpmyadmin" >> "Variables" then find "sql_mode" edit and remove "STRICT_ALL_TABLES or STRICT_TRANS_TABLES"

It is working for me. Hope it will help for All.

enter image description here

2
votes

I solved it using 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'));

It's working properly

1
votes

The error occurs due to the strict mode of MYSQL5.7. Please change your config/database.php in the connections.mysql section by putting 'strict' => false.

1
votes

This is late answer for this question, but it might help for others. This error can be occurred due to error in $fillable data in modal. You can try using

protected $guarded = []

instead of

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

You can check Null option in table structure, like this -

enter image description here

0
votes

Make sure request() has key 'name'.Replace request('name') to random string and try again.