php - updateorcreate - ¿Por qué la función nueva de Laravel/Eloquent devuelve un objeto, pero llamando a su atributo return 0?
updateorcreate laravel (0)
Mi código tiene un Model
dirección en Eloquent, se ve así:
Cabe destacar: todos mis modelos usan un uuid para clave primaria, es generado por un disparador en el DB MySQL. Esto en sí mismo funciona bien.
<?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
}
En mi controlador creo una función para crear una nueva dirección que obtiene su uuid de un disparador (como se mencionó anteriormente). Para pasar este uuid, que también es una clave externa, para mi usuario, intento llamar a 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);
}
}
antes de volver a cargar (y obtener mi uuid), el $address
object es igual
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)
}
Si en mi modelo de dirección $incrementing = false;
se define, y llamo $address = $address->fresh();
ahora el objeto $address
igual a NULL
Si omito en mi modelo de dirección $incrementing = false;
y llamo $address = $address->fresh();
ahora el $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)
}
Que es lo que quiero!
Pero tan pronto como llamo $address[''uuid'']
o $address->uuid
, devuelve int(0)
(no NULL)