"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Truco elocuente: modelo Laravel a partir de subconsulta

Truco elocuente: modelo Laravel a partir de subconsulta

Publicado el 2024-11-03
Navegar:965

Eloquent Trick: Laravel Model from Subquery

En Laravel, es común definir la tabla correspondiente a un modelo usando la propiedad table, como por ejemplo:

class User extends Model {
  protected $table = 'users';
}

Sin embargo, en lugar de asignar directamente a una tabla, podemos usar una subconsulta. Esta técnica nos permite encapsular consultas complejas dentro de la capa de aplicación, de manera muy similar a crear una vista de base de datos, pero con la flexibilidad adicional de las operaciones de Eloquent.

Por ejemplo, considere una tabla de usuarios que almacena información sobre administradores y usuarios habituales. Podemos crear un modelo AdminUser usando una subconsulta:

class AdminUser
{
    public function getTable(): string|\Illuminate\Contracts\Database\Query\Expression
    {
        $sql = User::query()
            ->select('id', 'name')
            ->where('admin_user', true)
            ->toRawSql();

        return DB::raw(sprintf('(%s) as admin_users', $sql));
    } 
}

Este modelo extrae datos de una subconsulta (seleccione ID, nombre de los usuarios donde admin_user = 1), lo que le permite consultarlo como un modelo estándar:

AdminUser::query()->get();

o

AdminUser::query()->first();

Sin embargo, tenga en cuenta que ciertas consultas, como buscar(1), no funcionarán directamente:

AdminUser::query()->find(1);

Para solucionar este problema, puede utilizar una condición donde combinada con first():

AdminUser::query()->where('id', 1)->first();

Conclusión

El ejemplo proporcionado es una ilustración sencilla de cómo podemos estructurar la lógica dentro de un modelo. Sin embargo, este enfoque puede ampliarse y adaptarse para adaptarse a escenarios mucho más complejos. Al aprovechar dichas estructuras, podemos administrar y extraer de manera eficiente una lógica compleja, asegurando que nuestros modelos permanezcan organizados, mantenibles y escalables a medida que crecen en complejidad.

Declaración de liberación Este artículo se reproduce en: https://dev.to/bedram-tamang/eloquent-trick-laravel-model-from-subquery-4im6?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3