Obtenta un Array de IDs con Eloquent Collection: pluck() o modelKeys()

- Andrés Cruz

Hay situaciones en las que necesita obtener una variedad de ID para algunos registros en la colección/tabla. Te mostraré dos formas rápidas de hacerlo.

Imagine que tiene una relación hasMany(): un rol tiene muchos permisos. Y luego necesita obtener ID de permiso de un rol determinado.

El código típico para hacer esto será con la función pluck():

// returns array of IDs
$permissionIDs = $role->permissions->pluck('id'); 

Pero, ¿qué pasa si el nombre de su clave principal de incremento automático no es "id"? Aparentemente, puedes obtener las claves del modelo Laravel, con el método modelKeys() en Collection:

// Same result as above. Even same character count :)
$permissionIDs = $role->permissions->modelKeys();

Tenga en cuenta que, como dije antes, funciona en Colecciones, no solo en el modelo Laravel. Entonces el método pluck() existe tanto para el Modelo como para la Colección, por lo que ambos funcionarían:

$allPermissions = Permission::pluck('id');
$permissions = $role->permissions->pluck('id');

Pero en el caso de modelKeys(), esto fallará con el error "Llamada al método no definido App\Models\Permission::modelKeys()":

$allPermissions = Permission::modelKeys();

La solución es obtener todos los resultados en la Colección y luego obtener las claves:

$allPermissions = Permission::all()->modelKeys();

Pero puede causar problemas de rendimiento si obtiene todos los registros de una tabla grande.

Entonces, solo un consejo rápido sobre el método modelKeys() que aprendí recién ahora, más como "interesante de saber" que realmente práctico en proyectos cotidianos :)

 

Artículo original:

https://laraveldaily.com/post/eloquent-get-array-of-ids-from-collection-pluck-or-modelkeys

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.