Как выбрать конкретные столбцы в Laravel Eloquent

позволяет сказать, что у меня есть 7 столбцов в таблице, и я хочу выбрать только два из них, что-то вроде этого

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

В красноречивой модели laravel это может выглядеть как

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

но я думаю, что это выражение выберет ВСЕ столбцы, где id равно 1, и я хочу только два столбца (имя, фамилия). как выбрать только два столбца?

Ответы

Ответ 1

Вы можете сделать это следующим образом:

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

Ответ 2

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

Ответ 3

Используя метод all(), мы можем выбрать определенные столбцы из таблицы, как показано ниже.

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

Примечание: Laravel 5.4

Ответ 4

Вы также можете использовать find() следующим образом:

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

Переменная $id может быть массивом на случай, если вам нужно получить несколько экземпляров модели.

Ответ 5

Также Model::all(['id'])->toArray() он будет извлекать только id как массив.

Ответ 6

Сначала вам нужно создать модель, представляющую эту таблицу, а затем использовать нижеприведенный способ получения данных только из двух полей.

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

Ответ 7

Вы можете использовать get(), а также все()

ModelName::where('a', 1)->get(['column1','column2']);

Ответ 8

Используйте следующий код: -

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

Ответ 9

Вы можете использовать Table::select ('name', 'surname')->where ('id', 1)->get ().

Имейте в виду, что при выборе только определенных полей вам придется сделать еще один запрос, если вы в конечном итоге получите доступ к этим другим полям позже в запросе (это может быть очевидно, просто нужно включить это оговорку). Включение поля id обычно является хорошей идеей, поэтому laravel знает, как писать любые обновления, которые вы делаете с экземпляром модели.

Ответ 10

Также вы можете использовать pluck.

Model::where('id',1)->pluck('column1', 'column2');

Ответ 11

Хотя наиболее распространенный подход заключается в использовании Model::select, он может вызвать рендеринг всех атрибутов, определенных с помощью методов доступа в классах модели. Итак, если вы определите атрибут в вашей модели:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

А затем используйте: TableName::select('username')->where('id', 1)->get();

Это будет сборник выходной как с first_name и username, а не только имя пользователя.

Лучше использовать pluck(), соло или опционально в сочетании с select - если вы хотите конкретные столбцы.

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

или же

TableName::where('id', 1)->pluck('username'); // это вернет коллекцию, состоящую только из значений username

Также, опционально, используйте ->toArray() для преобразования объекта коллекции в массив.

Ответ 12

Вы можете использовать следующий запрос:

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

Ответ 13

->get() очень похож на ->all()->first() т.д.) могут принимать поля, которые вы хотите вернуть в качестве параметров;

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

Вернул бы коллекцию, но только с column1 и column2

Ответ 14

Вы также можете использовать findOrFail() здесь хорошо использовать

если исключение не перехвачено, ответ 404 HTTP автоматически отправляется обратно пользователю. Нет необходимости писать явные проверки, чтобы возвращать 404 ответа, когда использование этого метода не дает ошибку 500.

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

Ответ 15

Если вы хотите получить одну строку и из одного столбца этой строки, один строчный код для получения значения конкретного столбца - это использовать метод find() наряду с указанием столбца, для которого вы хотите его получить.

Вот пример кода:

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

Ответ 16

Из laravel 5.3, только используя метод get() вы можете получить определенные столбцы вашей таблицы:

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

Или из laravel 5.4 вы также можете использовать метод all() для получения полей по вашему выбору:

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

с обоими вышеупомянутым методом get() или all() вы также можете использовать where() но синтаксис различен для обоих:

Модель :: все()

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

Модель :: получить()

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

Ответ 17

Получить значение одного столбца:

Table_Name::find($id)->column_name;

Даже вы можете использовать этот метод с предложением where:

Table_Name::where('id',$id)->first()->column_name;