> Faqs > Cómo saber los elementos que no tienen un modelo asociado en una relación de Laravel

Cómo saber los elementos que no tienen un modelo asociado en una relación de Laravel

Tengo una aplicación de Laravel. Tiene un modelo llamado en el que quiero hacer una consulta para saber qué registros no tienen un "profile" asociado.

Con profile tengo una relación así:

public function profile(): HasOne
{
    return $this->hasOne(GameProfile::class);
}

¿Cómo puedo saber los usuarios que no tienen un profile creado?

Respuestas

Para consultar por la inexistencia de registros en una relación de Laravel usas el método doesntHave() indicando el nombre de la relación sobre la que quieres usar.

User::doesntHave('profile')->get()

El método doesntHave te permite filtrar los User que no tienen un perfil asociado. No necesitas más. Es tan sencillo como eso.

Si quieres, con conveniencia puedes crearte un scope para poder manejar este consulta y ser más expresivo a la hora de usar el modelo en tus controladores.

public function scopeNullProfile(Builder $query)
{
    return $query->doesntHave('profile');
}

Esto es meramente opciónal, pero entonces tu consulta quería así:

User::nullProfile()->get();

Esto es como gustes...

Julian
1147 49 87 46