title: Laravel cast array still returns a string
body: <p>When retrieving a column I'd like to get it as an array, however it's returned as a string.</p>
  
  <p><strong>Migration</strong></p>
  
  <pre><code>$table-&gt;text('balance')-&gt;nullable();
  </code></pre>
  
  <p><strong>On the model (as per the Laravel docs)</strong></p>
  
  <pre><code>protected $casts = [
     'balance' =&gt; 'array',
  ];
  </code></pre>
  
  <p><strong>When saving data to the balance column</strong></p>
  
  <pre><code>$exchange = Exchange::findOrFail($id);
  $exchange-&gt;balance = json_encode($balance);
  $exchange-&gt;save();
  </code></pre>
  
  <p><strong>When retrieving the model</strong></p>
  
  <pre><code>$exchanges = Exchange::orderBy('title')-&gt;get();
  </code></pre>
  
  <p><strong>In the view</strong></p>
  
  <pre><code>foreach($exchanges as $ex)
     echo gettype($ex-&gt;balance) // This returns string, not an array
  endforeach
  </code></pre>
  
  <p>I'm puzzled as to why it's still a string while it should be an array. I've also tried the <code>json</code> instead of <code>text</code> column type in the migration, same result.</p>