mardi 29 novembre 2016

Why does Eloquent (in Laravel) cast my varchar uuid primary key to an integer resulting in errors?

Following up on my last night's question, I had a good night of sleep and "discovered" that this happens due to automatic casting / type conversion or whatever.

To summerize:

  • Models use uuidas primary key
  • They get them by a trigger on insert from mySQL
  • To get the uuid generated by the database runtime I call $model_object->fresh(); fresh()
  • This works when getting the object as a whole, but not when selecting just an attribute

Model

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Address extends Model {

    protected $table = 'Addresses';
    protected $fillable = ['uuid', 'zipCode', 'houseNumber'];
    protected $primaryKey = 'uuid';
    //public $incrementing = false;
}

Controller (where it screws up)

public function store(Request $request) {
    $input = $request->all();
    $address = Address::create($input);
    var_dump($address); exit;

//result (as expected)

    $address = $address->fresh();
    var_dump($address); exit;

//result (as expected)

var_dump($address->uuid); exit;//result (wow): int(0)
}



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire