Eu tenho 2 tabelas unidas no Eloquent: temas e usuários.
modelo de tema:
public function user() {
return $this->belongs_to('User');
}
modelo de usuário:
public function themes() {
return $this->has_many('Theme');
}
Minha chamada de API do Eloquent é a seguinte:
return Response::eloquent(Theme::with('user')->get());
O que retorna todas as colunas do tema (isso é bom) e todas as colunas do usuário (não está bem). Eu preciso apenas da coluna 'nome de usuário' do modelo de usuário, como posso limitar a consulta a isso?
Response
que tipo de classe preciso importar?Respostas:
Altere seu modelo para especificar quais colunas você deseja selecionar:
E não se esqueça de incluir a coluna à qual você está ingressando.
fonte
Para Laravel> = 5,2
Use o método -> pluck ()
Para Laravel <= 5.1
Use o método -> lists ()
fonte
Você pode fornecer uma matriz de campos no parâmetro get como:
ATUALIZAÇÃO (para Laravel 5.2) A partir da documentação , você pode fazer o seguinte:
fonte
SQLSTATE[42S22]: Column not found
e seu SQL não inclui a tabela nowith
. O sql que aparece no erro é "SELECT fk_table.column1 FROM main_table".Eu sei, você pede Eloquent, mas você pode fazer isso com o Fluent Query Builder
fonte
É assim que eu faço
A primeira resposta do usuário 2317976 não funcionou para mim, estou usando o laravel 5.1
fonte
pivot
$ array oculto de Post Modelprotected $hidden = ['pivot']
Outra opção é fazer uso da
$hidden
propriedade no modelo para ocultar as colunas que você não deseja exibir. Você pode definir essa propriedade em tempo real ou definir padrões em seu modelo.Agora, a senha do usuário será ocultada quando você retornar a resposta JSON.
Você também pode configurá-lo em tempo real de maneira semelhante.
fonte
static
.Usando com paginação
fonte
user2317976 introduziu uma ótima maneira estática de selecionar colunas de tabelas relacionadas.
Aqui está um truque dinâmico que descobri para que você possa obter o que quiser ao usar o modelo:
Acabei de descobrir que esse truque também funciona bem com load (). Isso é muito conveniente.
Certifique-se de incluir também a chave da tabela de destino, caso contrário, ela não será capaz de encontrá-la.
fonte
Deste jeito:
fonte
Eu sei que essa é uma pergunta antiga, mas se você estiver construindo uma API, como o autor da pergunta faz, use transformadores de saída para executar essas tarefas.
Transofrmer é uma camada entre o resultado real da consulta ao banco de dados e um controlador. Ele permite controlar e modificar facilmente o que será enviado a um usuário ou consumidor de API.
Eu recomendo Fractal como uma base sólida de sua camada de transformação de saída. Você pode ler a documentação aqui .
fonte
No Laravel 4 você pode impedir que certos campos sejam retornados adicionando o seguinte em seu modelo.
http://laravel.com/docs/eloquent#converting-to-arrays-or-json
fonte
No Laravel 5.5, a maneira mais limpa de fazer isso é:
Você adiciona dois pontos e os campos que deseja selecionar separados por uma vírgula e sem espaço entre eles.
fonte
Usando o modelo:
Usando o Query Builder:
fonte
Se bem entendi isso, o que é retornado está bom, exceto que você deseja ver apenas uma coluna. Nesse caso, o seguinte deve ser muito mais simples:
fonte
Confira, http://laravel.com/docs/database/eloquent#to-array
Você deve ser capaz de definir quais colunas não deseja exibir em sua API.
fonte