5 Secretos de Eloquent Laravel para mejorar su código

Eloquent es el ORM por defecto con Laravel. Implementa el patrón Active-Record y proporciona una forma fácil de interactuar con su base de datos. Cada modelo representa una tabla en su base de datos con la que puede trabajar.

5 Secretos de Eloquent Laravel para mejorar su código

Atributos de la serpiente (Snake Attributes)

Los atributos de la serpiente son interesantes. Echemos un vistazo a lo que dice el código:

/**
 * Indica si los atributos están en la caja de la serpiente en los arreglos.
 *
 * @var bool
 */
public static $snakeAttributes = true;

Muy a menudo, la gente comete un error al usar esta propiedad para cambiar la forma de acceder a las propiedades. Muchas personas creen que si cambian esta propiedad, pueden acceder fácilmente a los atributos usando la anotación camel-case. Ese no es el caso. Aconsejamos encarecidamente que no se utilice. Simplemente está ahí para definir si los atributos están en mayúsculas o minúsculas cuando el modelo se presenta como un array.

Paginación

Si usas el ORM Eloquent de Laravel, estás de suerte. Proporciona una manera fácil de paginar los resultados fuera de la caja. Puede que estés familiarizado con algo como esto:

$comments = Comment::paginate(20);

Con este método, puedes paginar el modelo de comentarios con 20 artículos por página. Cambiar ese valor le da la posibilidad de definir cuántos elementos se muestran por página. Si no especifica nada, se aplica el valor predeterminado, que es 15.

Suponga que desea mostrar los comentarios en varios lugares de su sitio web. Siempre 30 comentarios por página. Entonces sería molesto si tiene que pasar el parámetro 30 en cada lugar. Por lo tanto, puede establecer un nuevo valor por defecto directamente en el modelo.

protected $perPage = 30;

Añadiendo valores personalizados a los modelos

Eloquent tiene una gran característica llamada "Accessors". Esta característica permite añadir campos personalizados a los modelos que no existen en el modelo o en la tabla. No importa si usas valores existentes o defines valores completamente nuevos. Puedes devolver cualquier cosa. Aquí hay un ejemplo de cómo funciona Accessors. Dado que hay un modelo llamado Usuario donde ponemos el código abajo.

function getFullNameAttribute() {
    return sprintf('%s %s', $this->first_name, $this->last_name);
}

Ahora tienes acceso a un atributo full_name en el modelo de publicación, como este:

User::latest()->first()->full_name;

El problema es que si devuelves los objetos, como una colección, este atributo no se añade al modelo de usuario. Añade el atributo protected $appends a tu modelo. Acepta un array con uno o varios campos que deberían añadirse automáticamente a partir de ahora. Así es como se ve:

protected $appends = ['full_name'];

Mutators para columnas no existentes

Los Mutators son lo opuesto a los Accessors. Puedes usarlos para cosas realmente geniales. Por ejemplo, para convertir diferentes entradas. Vamos a mostrarte algo. Imagina que quieres guardar una especie de período de tiempo. Normalmente, siempre guardas la unidad más pequeña posible. En nuestro caso, segundos. Por razones UX, el usuario no quiere introducir segundos, sino por ejemplo, minutos en un lugar, u horas en otro lugar. Todo puede ser resuelto muy rápidamente.

class Video extends Model
{
    public function setDurationInMinutesAttribute($value)
    {
        $this->attributes['duration_in_seconds'] = $value * 60;
    }

    public function setDurationInHoursAttribute($value)
    {
        $this->attributes['duration_in_seconds'] = $value * 60 * 60;
    }
}

¿Qué significa? Significa que puedes usar la columna inexistente duration_in_minutes en el modelo, pero en el fondo, la columna duration_in_seconds se actualiza. Lo mismo se aplica a la columna inexistente duration_in_hours. Esto da como resultado la siguiente lógica, por ejemplo:

class AnyController
{
    public function store()
    {
        $video->update([
            'title' => request('title'),
            'duration_in_minutes' => request('duration_in_minutes'),
        ]);
    }
}

Esto le ahorra el cálculo en el controlador, y puede simplemente utilizar una columna inexistente y usar un mutador para asignarla correctamente a la columna correcta mientras realiza algunos cálculos.

Llaves de modelo (Model keys)

De vez en cuando, hay que buscar todos los ID de una consulta específica. No importa si se trata de una consulta compleja o no. La mayoría de la gente probablemente haría lo siguiente:

User::all()->pluck('id');

Esto funciona muy bien. Pero ahora tienes una colección de vuelta. Para obtener un array, tendrías que pasarla al método toArray() de nuevo.

User::all()->pluck('id')->toArray();

Sin embargo, en la mayoría de los casos, esto puede acortarse. Como esto:

User::all()->modelKeys();

Este método devuelve un array. En nuestro caso, los IDs. Es importante entender que este método no siempre devuelve necesariamente las identificaciones. Devuelve, como su nombre indica, todas las claves primarias como un array. Las claves primarias pueden ser definidas en el modelo. El valor por defecto es id.

protected $primaryKey = 'id';

¿Cuál es su reacción?

like
0
dislike
0
love
2
funny
0
angry
0
sad
0
wow
0