"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Truque Eloquente: Modelo Laravel da Subconsulta

Truque Eloquente: Modelo Laravel da Subconsulta

Publicado em 2024-11-03
Navegar:551

Eloquent Trick: Laravel Model from Subquery

No Laravel, é comum definir a tabela correspondente de um modelo usando a propriedade table, como:

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

No entanto, em vez de mapear diretamente para uma tabela, podemos usar uma subconsulta. Essa técnica nos permite encapsular consultas complexas na camada de aplicação, de forma semelhante à criação de uma visualização de banco de dados, mas com a flexibilidade adicional das operações do Eloquent.

Por exemplo, considere uma tabela de usuários que armazena informações sobre administradores e usuários regulares. Podemos criar um modelo AdminUser usando uma 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 extrai dados de uma subconsulta (selecione id, nome dos usuários onde admin_user = 1), permitindo que você os consulte como um modelo padrão:

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

ou

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

No entanto, esteja ciente de que certas consultas, como find(1), não funcionarão diretamente:

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

Para contornar isso, você pode usar uma condição where combinada com first():

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

Conclusão

O exemplo fornecido é uma ilustração direta de como podemos estruturar a lógica dentro de um modelo. No entanto, esta abordagem pode ser dimensionada e adaptada para acomodar cenários muito mais complexos. Ao aproveitar essas estruturas, podemos gerenciar e extrair com eficiência lógica complexa, garantindo que nossos modelos permaneçam organizados, sustentáveis ​​e escaláveis ​​à medida que crescem em complexidade.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/bedram-tamang/eloquent-trick-laravel-model-from-subquery-4im6?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3