Como selecionar colunas específicas no laravel eloquent




laravel-5 orm (12)

digamos que tenho 7 colunas na tabela e quero selecionar apenas duas delas, algo como isto

SELECT `name`,`surname` FROM `table` WHERE `id` = '1';

No modelo laravel eloquente, pode parecer com isso

Table::where('id', 1)->get();

mas acho que essa expressão selecionará TODAS as colunas onde id é igual a 1 e quero apenas duas colunas (nome, sobrenome). como selecionar apenas duas colunas?


Embora a abordagem mais comum seja usar Model::select , ela pode causar a renderização de todos os atributos definidos com métodos de acessador nas classes de modelo. Portanto, se você definir o atributo no seu modelo:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the user's first name.
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

E então use: TableName::select('username')->where('id', 1)->get();

Ele produzirá uma coleção com username e username , e não apenas nome de usuário.

Melhor usar pluck() , solo ou opcionalmente em combinação com select - se você quiser colunas específicas.

TableName::select('username')->where('id', 1)->pluck('username');

ou

TableName::where('id', 1)->pluck('username'); // que retornaria uma coleção composta apenas por valores de username de username

Além disso, opcionalmente, use ->toArray() para converter o objeto de coleção em matriz.


No laravel 5.3, apenas usando o método get() , você pode obter colunas específicas da sua tabela:

ModelName::findOrFail($id, ['firstName', 'lastName']);

Ou no laravel 5.4, você também pode usar o método all() para obter os campos de sua escolha:

ModelName::find($id_of_the_record, ['column_name'])->toArray()['column_name'];

com o método acima get() ou all() você também pode usar where() mas a sintaxe é diferente para ambos:

Model :: all ()

YouModelName::get(['id', 'name']);

Model :: get ()

YourModelName::all('id', 'name');

Se você deseja obter uma única linha e a partir dessa coluna, um código de linha para obter o valor da coluna específica é usar o método find() ao lado da especificação da coluna que você deseja recuperá-la.

Aqui está o código de exemplo:

Table('table')->select('name','surname')->where('id',1)->get();

Também Model::all(['id'])->toArray() só buscará o id como array.


Usando o método all (), podemos selecionar colunas específicas da tabela como mostrado abaixo.

ModelName::all('column1', 'column2', 'column3');

Nota : Laravel 5.4


Use o seguinte código: -

   $result = DB::Table('table_name')->select('column1','column2')->where('id',1)->get();   

Você pode usar Table::select ('name', 'surname')->where ('id', 1)->get () .

Lembre-se de que, ao selecionar apenas determinados campos, você precisará fazer outra consulta se acabar acessando esses outros campos posteriormente na solicitação (isso pode ser óbvio, só queria incluir essa ressalva). Incluir o campo id geralmente é uma boa idéia, para que o laravel saiba como escrever de volta todas as atualizações que você fizer na instância do modelo.


Você pode usar a consulta abaixo:

YourModelName::all('id', 'name')->where('id',1);

Você primeiro precisa criar um Modelo, que represente essa Tabela e, em seguida, use a maneira Eloquent abaixo para buscar os dados de apenas 2 campos.

Model::where('id', 1)
         ->pluck('name', 'surname')
         ->all();

Você também pode usar find() assim:

ModelName::find($id, ['name', 'surname']);

A variável $id pode ser uma matriz, caso você precise recuperar várias instâncias do modelo.


->get() é parecido com ->all() (e ->first() etc.) pode usar os campos que você deseja trazer de volta como parâmetros;

->get/all(['column1','column2'])

Traria de volta a coleção, mas apenas com column1 e column2


Table::where('id', 1)->get(['name','surname']);




eloquent