Solución:
firstOrNew ()
Esta función devolverá el primer registro de la base de datos o creará una instancia de modelo nueva que aún no existe en la base de datos. Por lo tanto, si desea verificar si la instancia fue extraída de la base de datos o si es una nueva instancia, puede verificar la exists
propiedad (no funciona) en el modelo.
if ($user->exists) {
// user already exists and was pulled from database.
} else {
// user created from 'new'; does not exist in database.
}
La pregunta original era sobre firstOrNew()
, pero parece que mucha gente viene aquí por firstOrCreate()
, así como. firstOrCreate()
es diferente y requiere una verificación diferente.
firstOrCreate ()
Esta función devolverá el primer registro de la base de datos o creará un nuevo registro en la base de datos y lo devolverá. Dado que un registro recién creado existiría en la base de datos, no puede verificar la exists
propiedad, porque será cierto en ambos casos. Sin embargo, puede comprobar el wasRecentlyCreated
propiedad. Esta propiedad será verdadera si la instancia del modelo actual se acaba de crear en la base de datos, o falsa si ya estaba en la base de datos.
if ($user->wasRecentlyCreated) {
// user just created in the database; it didn't exist before.
} else {
// user already existed and was pulled from database.
}
Puede verificar si su usuario fue creado recientemente.
if ($user->wasRecentlyCreated) {
// new user
} else {
// user already exists
}
(Fuente: Thomas Kim de esta respuesta)
Si creó el modelo en el ciclo de vida actual, el atributo wasRecentlyCreated del modelo se establecerá en verdadero. De lo contrario, ese atributo se establecerá en falso.
En otras palabras, digamos que tiene un usuario con el correo electrónico, [email protected]
$user = User::firstOrCreate(['email' => '[email protected]']);
var_dump($user->wasRecentlyCreated);
// lo anterior se volcará falso porque esta entrada ya existía, de lo contrario, verdadero.