Digamos que estamos usando o construtor de consultas do Laravel:
$users = DB::table('really_long_table_name')
->select('really_long_table_name.id')
->get();
Estou procurando um equivalente a este SQL:
really_long_table_name AS short_name
Isso seria especialmente útil quando eu tiver que digitar muitas seleções e wherees (ou normalmente incluir o alias no alias da coluna do select também, e ele será usado na matriz de resultados). Sem nenhum apelido de tabela, há muito mais digitação para mim e tudo se torna muito menos legível. Não consegue encontrar a resposta nos documentos do laravel, tem alguma idéia?
protected $table = "books";
), então como posso criar um alias? SQL (por exemplo, gerado:... FROM books AS A ...
)protected $table = 'really_long_table_name AS short_name';
mas isso falharia nos INSERTs. Também pode interromper as consultas de relacionamento. Estou usando o Lumen e um padrão DDD / Repository para evitar o Eloquent completamente.Para usar aliases em modelos eloquentes, modifique seu código assim:
Isso adicionará automaticamente o prefixo da tabela aos nomes da tabela e retornará uma instância do
Items
modelo. não é um resultado de consulta simples. A adiçãoDB::raw
evita que o laravel adicione prefixos de tabela a aliases.fonte
Unknown column 'table_alias.deleted_at'
->withTrashed()
e->whereNull('table_alias.deleted_at')
Aqui está como alguém pode fazer isso. Vou dar um exemplo de união para que fique super claro para alguém.
Espero que isto ajude.
fonte
Para usar no Eloquent. Adicione em cima do seu modelo
protected $table = 'table_name as alias'
..Então use em sua consulta como
ModelName::query()->select(alias.id, alias.name)
fonte
Você pode usar menos código, escrevendo o seguinte:
E, claro, se você quiser selecionar mais campos, basta escrever um "," e adicionar mais:
Isso é muito prático quando você usa uma consulta complexa de junções
fonte
O mesmo que a resposta AMIB, para o erro de exclusão suave "Coluna desconhecida 'table_alias.deleted_at'", basta adicionar
->withTrashed()
e manipular você como->whereRaw('items_alias.deleted_at IS NULL')
fonte