With a very simple model:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Example extends Model
{
}
And it's schema for completeness:
<?php
use App\Models\Lease;
use App\Models\Choice;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTableExamples extends Migration {
    public function up()
    {
        Schema::create('example', function(Blueprint $table)
        {
            $table->increments('id');
            $table->enum('status', [1, 2, 3])->default(1);
            $table->text('abc')->nullable();
            $table->text('foo')->nullable();
        });
    }
    public function down()
    {
        Schema::dropIfExists('example');
    }
}
Why does the following save statement, result in empty attributes for the fields that are defined with defaults?
$example1 = new App\Models\Example();
$example1->foo = "BAR";
$example1->save();
var_dump($example1->attributes);
This outputs the following, note that the output has skipped the status field. Also note that field abc is missing.
array (size=4)
    'foo' => string 'BAR' (length=3)
    'id' => int 19
If I reload the model, with $example1->fresh(), I get the expected output:
array (size=4)
    'foo' => string 'BAR' (length=3)
    'abc' => null,
    'status' => int 1,
    'id' => int 19
Is there a way to avoid the fresh method? Under the hood, fresh is another trip to the db.
via Chebli Mohamed
 
Aucun commentaire:
Enregistrer un commentaire