title: Test returns null for NOT NULL field with default value
body: <p>I have the below code:I'm using it a simple way to drive out the columns of the feature_set table, so would like air_conditioning, pool .. etc with a boolean value which defaults to 0.</p>
  
  <p>However when I use a factory or instanciate it directly like below ->air_conditioning is always null, and I can't figure out why.I tested with a mysql Db and when I add a new row it defaults to 0 correctly. Am I missing something here, why arn't the default values of 0 set on the model instance.</p>
  
  <pre><code>class FeatureSetTest extends TestCase
  {
      use RefreshDatabase;
    public function testCanCreateFeatureSetAndValuesDefaultToFalse()
     {
         $featureSet = new FeatureSet(['property_id' =&gt; '1']);
         $featureSet-&gt;save();
  
         $this-&gt;assertFalse($featureSet-&gt;air_conditioning);
     }
  }
  </code></pre>
  
  <p>...</p>
  
  <pre><code>    public function up()
     {
         Schema::create('feature_sets', function (Blueprint $table) {
             $table-&gt;increments('id');
             $table-&gt;unsignedInteger('property_id');
             $table-&gt;boolean('air_conditioning')-&gt;default(false);
             $table-&gt;timestamps();
         });
     }
  </code></pre>
  
  <p>If I dd $featureSet after it's saved in the test I get:</p>
  
  <pre><code> #attributes: array:4 [
     "property_id" =&gt; "1"
     "updated_at" =&gt; "2018-05-12 16:15:19"
     "created_at" =&gt; "2018-05-12 16:15:19"
     "id" =&gt; 1
   ]
  </code></pre>
  
  <p>If I do dd(DB::select(DB::raw('SHOW CREATE TABLE feature_sets'))); it outputs the below so 0 is set as the default and : </p>
  
  <pre><code> CREATE TABLE `feature_sets` (\n
             `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n
             `property_id` int(10) unsigned NOT NULL,\n
             `air_conditioning` tinyint(1) NOT NULL DEFAULT '0',\n
             `created_at` timestamp NULL DEFAULT NULL,\n
             `updated_at` timestamp NULL DEFAULT NULL,\n
             PRIMARY KEY (`id`)\n
           ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_c
  </code></pre>
  
  <p>And finally If i put dd(DB::select(DB::raw('SELECT * FROM feature_sets'))); in my test I can see the default value is correctly set:</p>
  
  <pre><code>array:1 [
    0 =&gt; {#598
      +"id": 1
      +"property_id": 1
      +"air_conditioning": 0
      +"created_at": "2018-05-12 15:44:31"
      +"updated_at": "2018-05-12 15:44:31"
    }
  ]
  </code></pre>
  
  <p>//Feature Set Model.</p>
  
  <pre><code>&lt;?php
  
  namespace App\Models\Property;
  
  use Illuminate\Database\Eloquent\Model;
  
  class FeatureSet extends Model
  {
      protected $guarded = [];
  
      public function asFeaturesArray()
      {
  
          return [
              'air_conditioning' =&gt; [
                  'title' =&gt; __('Air Conditioning'),
                  'value' =&gt; $this-&gt;air_conditioning
              ]
          ];
      }
  }
  </code></pre>
  
  <p>I dont understand why it doesn't give me 0 back for ->air_conditioning</p>