[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Antonio Fernandes
Criador Antonio Fernandes 24/08/2018

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?

Manager Carlos Ferreira 24/08/2018

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? :-)

Carlos Ferreira
Criador Antonio Fernandes 24/08/2018

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.

Antonio Fernandes
Manager Carlos Ferreira 24/08/2018

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>

Carlos Ferreira
Criador Antonio Fernandes 24/08/2018

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.

Antonio Fernandes
Manager Carlos Ferreira 24/08/2018

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();

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!