laravel eloquentで特定の列を選択する方法


137

テーブルに7つの列があり、そのうちの2つだけを選択したいとします。

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

laravel eloquentモデルでは、次のようになります

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

しかし、この式ではidが1に等しいすべての列が選択されると思います。2つの列(name、surname)だけが必要です。2つの列のみを選択する方法


質問していただきありがとうございます。私は常に「クラシック」SQLクエリでこれを適切に実行していたので、それはクレイジーですが、Eloquentを使用する必要があったので、動作させるだけでとても混乱し、クエリが使用しているメモリの量に気づかなかったので、すべてを選択していました。
Jonny Perl

回答:


223

あなたはこのようにそれを行うことができます:

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

1
すべてのフィールドを選択したいとします。それを行うにはどうすればよいでしょうか
アロラ王子

1
まず、質問がある場合は質問してください。そしてあなたのケースのために-含めたくない列の代わりにすべての列に言及してください。とても簡単です。
MarcinNabiałek2018年

2
すべてのコラムに言及せずにそれを行う他の方法はありませんか
アローラ王子

1
これは、単一のテーブルを持つ基本的なケースで機能します。ただし、ピボットテーブルでリレーションを使用している場合は、ピボット列も自動的に選択されます。
Benubird、2018

1
@OPVこれはSELECT name, surname FROM Table where id = 1SQLクエリを実行するだけです
MarcinNabiałek18年

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

同じことをしたいのですが、別の方法を使用しています。モデルのインスタンスを作成してメソッドを選択し、次に列を選択します。すなわち$ model = new MyModel(); $ model-> select(['col1'、 'col2']); しかし、この事は働いていない
Dhirender

49

all()メソッドを使用すると、以下のようにテーブルから特定の列を選択できます。

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

:Laravel 5.4


同じことをしたいのですが、別の方法を使用しています。モデルのインスタンスを作成してメソッドを選択し、次に列を選択します。すなわち$ model = new MyModel(); $ model-> select(['col1'、 'col2']); しかし、これは機能していません。
Dhirender 2018年

37

次のfind()ように使用することもできます:

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

$id変数は、モデルの複数のインスタンスを取得する必要がある場合には配列にすることができます。


24

またModel::all(['id'])->toArray()、IDを配列としてフェッチするだけです。


17

最初に、そのテーブルを表すモデルを作成し、次に以下のEloquentの方法を使用して、2つのフィールドのみのデータをフェッチする必要があります。

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

これは、多対多の関係のピボットテーブルでも機能するため、最良の答えです。
Luciano Fantuzzi

8

get()およびall()を使用できます

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

4

また、pluckを使用できます。

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

6
pluck()SELECT ...クエリを変更しないため、説明した他のメソッドよりも効率が悪いことに注意してください。代わりに、すでに返された結果セットを操作します。
ベンジョンソン

4

1つの列の値を取得します。

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

このメソッドをwhere句で使用することもできます。

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

クエリビルダー:

DB::table('table_names')->find($id)->column_name;

どこでcluase:

DB::table('table_names')->where('id',$id)->first()->column_name;

または

DB::table('table_names')->where('id',$id)->first('column_name');

最後のメソッドの結果は配列です


3

使用できますTable::select ('name', 'surname')->where ('id', 1)->get ()

特定のフィールドのみを選択する場合、リクエストの後半で他のフィールドにアクセスすることになる場合は、別のクエリを実行する必要があることに注意してください(明らかな場合がありますが、その警告を含めたいだけです)。idフィールドを含めることは、通常は良いアイデアです。そのため、laravelは、モデルインスタンスに対して行った更新を書き戻す方法を知っています。


3

laravel 5.3以降では、get()メソッドのみを使用して、テーブルの特定の列を取得できます。

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

または、laravel 5.4以降all()では、選択したフィールドを取得するためのメソッドを使用することもできます。

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

上記の方法の両方でget()、またはall()あなたが使用することもできwhere()ますが、構文の両方に異なります。

モデル:: all()

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

Model :: get()

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

3

テーブルから特定の列の結果を取得するには、列名を指定する必要があります。

次のコードを使用してください:-

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

例えば ​​-

$result = DB::Table('Student')->select('subject','class')->where('id',1)->get();  

他の人がそれから学ぶことができるように、あなたの答えにいくつかの説明を追加してください
ニコ・ハーセ

2

最も一般的なアプローチはを使用するModel::selectことですが、モデルクラス内のアクセサメソッドで定義されたすべての属性をレンダリングする可能性があります。したがって、モデルで属性を定義すると、次のようになります。

<?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);
    }
}

次に使用します: 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()コレクションオブジェクトを配列に変換するために使用します。


1

->get()多くのような->all()(そして->first()、パラメータとして持ち帰るにしたいフィールドを取ることができますなど。);

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

コレクションを復活させるでしょうが、column1そしてcolumn2


1

findOrFail()ここメソッドを使用することもできます

例外がキャッチされない場合は、404 HTTP応答が自動的にユーザーに送信されます。これらのメソッドを使用しても500エラーが発生しない場合は、404応答を返すために明示的なチェックを記述する必要はありません。

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

1

単一の行を取得し、その行から単一の列を取得する場合、特定の列の値を取得するための1行のコードは、取得する列のfind()指定と一緒にメソッドを使用することです。

これがサンプルコードです:

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

0

以下のクエリを使用できます。

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

1
他の人がそれから学ぶことができるように、あなたの答えにいくつかの説明を追加してください
ニコ・ハーセ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.