My code has an Address Model
in Eloquent, it looks like this:
Noteworthy: all my models use an uuid for primary key, it is generated by a trigger in the MySQL DB. This on its own works well.
<?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; //<- without this it returns 0, with it returns null
}
In my controller I create a function to create a new Address that gets its uuid from a trigger (as mentioned above). To pass this uuid, that is also a foreign key, to my user I try to call fresh();
<?php
public function store(Request $request) {
$input = $request->all();
try {
$address = Address::create($input);
// Call fresh to also get the trigger generated uuid primaryKey
$address = $address->fresh(); //bug!!!
//$address = Address::query()->where('zipCode', '=', $address->zipCode)->where('houseNumber', '=', $address->houseNumber)->first(); //works, but is not as nice
} catch (\exception $e) {
$response['error'] = $e->getMessage();
return response($response, 400);
}
}
before reloading (and getting my uuid), the $address
object equals
object(App\Models\Address)#186 (23) {
["table":protected]=>
string(9) "Addresses"
["fillable":protected]=>
array(3) {
[0]=>
string(4) "uuid"
[1]=>
string(7) "zipCode"
[2]=>
string(11) "houseNumber"
}
["primaryKey":protected]=>
string(4) "uuid"
["incrementing"]=>
bool(false)
["connection":protected]=>
NULL
["keyType":protected]=>
string(3) "int"
["perPage":protected]=>
int(15)
["timestamps"]=>
bool(true)
["attributes":protected]=>
array(4) {
["zipCode"]=>
string(6) "4651ZX"
["houseNumber"]=>
string(2) "34"
["updated_at"]=>
string(19) "2016-11-28 23:13:47"
["created_at"]=>
string(19) "2016-11-28 23:13:47"
}
["original":protected]=>
array(4) {
["zipCode"]=>
string(6) "4651ZX"
["houseNumber"]=>
string(2) "34"
["updated_at"]=>
string(19) "2016-11-28 23:13:47"
["created_at"]=>
string(19) "2016-11-28 23:13:47"
}
["relations":protected]=>
array(0) {
}
["hidden":protected]=>
array(0) {
}
["visible":protected]=>
array(0) {
}
["appends":protected]=>
array(0) {
}
["guarded":protected]=>
array(1) {
[0]=>
string(1) "*"
}
["dates":protected]=>
array(0) {
}
["dateFormat":protected]=>
NULL
["casts":protected]=>
array(0) {
}
["touches":protected]=>
array(0) {
}
["observables":protected]=>
array(0) {
}
["with":protected]=>
array(0) {
}
["exists"]=>
bool(true)
["wasRecentlyCreated"]=>
bool(true)
}
If in my Address Model $incrementing = false;
is defined, and I call $address = $address->fresh();
now the $address
object equal NULL
If i omit in my Address Model $incrementing = false;
, and I call $address = $address->fresh();
now the $address
object equal
object(App\Models\Address)#195 (23) {
["table":protected]=>
string(9) "Addresses"
["fillable":protected]=>
array(3) {
[0]=>
string(4) "uuid"
[1]=>
string(7) "zipCode"
[2]=>
string(11) "houseNumber"
}
["primaryKey":protected]=>
string(4) "uuid"
["connection":protected]=>
NULL
["keyType":protected]=>
string(3) "int"
["perPage":protected]=>
int(15)
["incrementing"]=>
bool(true)
["timestamps"]=>
bool(true)
["attributes":protected]=>
array(5) {
["uuid"]=>
string(36) "0e85ea0c-b5c0-11e6-9c20-002590f967ca"
["zipCode"]=>
string(6) "4651ZX"
["houseNumber"]=>
string(2) "34"
["updated_at"]=>
string(19) "2016-11-28 23:11:56"
["created_at"]=>
string(19) "2016-11-28 23:11:56"
}
["original":protected]=>
array(5) {
["uuid"]=>
string(36) "0e85ea0c-b5c0-11e6-9c20-002590f967ca"
["zipCode"]=>
string(6) "4651ZX"
["houseNumber"]=>
string(2) "34"
["updated_at"]=>
string(19) "2016-11-28 23:11:56"
["created_at"]=>
string(19) "2016-11-28 23:11:56"
}
["relations":protected]=>
array(0) {
}
["hidden":protected]=>
array(0) {
}
["visible":protected]=>
array(0) {
}
["appends":protected]=>
array(0) {
}
["guarded":protected]=>
array(1) {
[0]=>
string(1) "*"
}
["dates":protected]=>
array(0) {
}
["dateFormat":protected]=>
NULL
["casts":protected]=>
array(0) {
}
["touches":protected]=>
array(0) {
}
["observables":protected]=>
array(0) {
}
["with":protected]=>
array(0) {
}
["exists"]=>
bool(true)
["wasRecentlyCreated"]=>
bool(false)
}
Which is what I want!
But as soon as I call $address['uuid']
or $address->uuid
it returns int(0)
(not NULL)
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire