Select personalizado?
Como fazer um Select personalizado no laravel unindo tabela, ou seja, a fim de melhorar a perfomance, como posso trazer apanas campos específicos de acordo com a lógica.
Explicando melhor...imagine uma tabela CLIENTE que tenha muitos campos e uma tabela de ENDERECOS o qual está ligado ao cliente. Porém como citado, para melhorar a performance da consulta que trazer apenas os campos NAME E EMAIL (cliente ) e RUA E BAIRRO (endereço), que no exemplo seriam os únicos campos necessário em tal momento. Como faço isso no laravel?
Olá Antonio!
Tudo bem?
Uma boa pergunta amigo.
Você pode limitar em sua query qual ou quais colunas você deseja trazer, pra isso você pode usar o método select('col1', 'col2')
E para povoar campos do tipo <select> você pode usar o método: pluck('id', 'name')
É possível limitar também na mesma consulta a quantidade de colunas que vai trazer no relacionamento, mas, apenas usando o with('nomeMetodoRelacionamento') já otimiza bastante a consulta, trazendo todos os resultados e relacionamentos em uma única consulta ao banco de dados.
Qualquer dúvida amigo, me retorna. Tá bom? :-)
Bem ainda estou realmente aprendendo os conceitos iniciais do laravel...se não for muito se conseguisse adicionar um video mostrando exatamente a questão que levantei acima ficaria imensamente grato.
Olá, Antonio!
Pode tirar qualquer dúvida comigo que te respondo :)
O que não ficou claro?
Vou te dá um exemplo de como povoar o select com usuário usando o método pluck(), veja:
#controller
$users = User::where('status', 'A')->pluck('id', 'name');
Se tiver utilizando na view o Laravel Collective Form e passar esse objeto de $users já vai povoar automaticamente, definindo no value do option o ID e visível o name. Ex: <option value="1">Carlos</option>
(Mais sobre o Laravel Collective: https://academy.especializati.com.br/aula/instalando-laravel-collective-form-html)
#sem pacotes:
<select name="user">
<option value="">Selecione</option>
@foreach ($users as $user)
<option value="{{ $user->id }}">{{ $user->name }}</option>
@endforeach
</select>
Acho que não fui claro na minha colocação...desculpe...kkk...não estava me referindo a um select de formulário mais ao SELECT do SQL. Ou seja como fazer um SQL personalidazado EX SELECT u.name, u.sexo, a.rua, a.numero FROM users INNER JOIN address.... ou seja uma busca personalizada retornando apenas os campos desejados na consulta a fim de otimizar a mesma, levando consideração um exemplo a tabela users e address tivessm muitos campos.
Olá, Antonio!
Ah sim, eu que interpretei errado rsrs
Você pode combinar na query o método select() para especificar qual, ou quais colunas deseja trazer na consulta.
Exemplo:
$users = User::where('status', 'A')->select('id', 'name', 'email')->get();
Se debugar a variável $users (dd($users);) vai notar que só retorna as colunas id,name,email
Em uma busca relacionada, pode fazer assim:
$users = User::where('status', 'A')
->select('id', 'name', 'email')
->with('nomeRelacionamento:col1,col2')
->get();
E esse mesmo select() se aplicar em uma consulta com o join();
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!