如何在laravel雄辩中选择特定的列

dev*_*l Ψ 95 orm laravel eloquent laravel-5

假设我在表中有7列,我想只选择其中两列,就像这样

SELECT `name`,`surname` FROM `table` WHERE `id` = '1';
Run Code Online (Sandbox Code Playgroud)

在laravel雄辩的模型中,它可能看起来像这样

Table::where('id', 1)->get();
Run Code Online (Sandbox Code Playgroud)

但我想这个表达式会选择id等于1的所有列,而我只想要两列(name,surname).如何只选择两列?

Mar*_*łek 170

你可以这样做:

Table::select('name','surname')->where('id', 1)->get();
Run Code Online (Sandbox Code Playgroud)

  • 假设我想选择除一个之外的每个字段我该怎么做 (2认同)
  • 首先,当你有问题时,问一个。对于您的情况 - 只需提及所有列而不是您不想包含的列。就这么简单。 (2认同)
  • 没有任何其他方法可以在不提及所有列的情况下做到这一点 (2认同)
  • 这适用于具有单个表的基本情况。但是,如果您在数据透视表上使用关系,那么这也会自动选择数据透视列。 (2认同)
  • @OPV 它只是运行`SELECT name, surname FROM Table where id = 1` SQL 查询 (2认同)

Utk*_*dey 51

Table::where('id', 1)->get(['name','surname']);
Run Code Online (Sandbox Code Playgroud)

  • 我想要同样的东西,但使用不同的方法。我想通过创建模型实例来选择方法,然后选择列。即 $model = new MyModel(); $model->select(['col1', 'col2']); 但这东西不起作用 (2认同)

Siv*_*tti 34

通过使用all()方法,我们可以从表中选择特定的列,如下所示.

ModelName::all('column1', 'column2', 'column3');
Run Code Online (Sandbox Code Playgroud)

注意:Laravel 5.4


Sam*_*mie 23

你也可以find()像这样使用:

ModelName::find($id, ['name', 'surname']);
Run Code Online (Sandbox Code Playgroud)

$id变量可以是如果你需要检索模型的多个实例的数组.

  • 这应该是选定的答案。 (4认同)

use*_*958 18

Model::all(['id'])->toArray()只会获取id作为数组.


Mos*_*adi 14

获取一列的值:

Table_Name::find($id)->column_name;
Run Code Online (Sandbox Code Playgroud)

您可以将此方法与 where 子句一起使用:

Table_Name::where('id',$id)->first()->column_name;
Run Code Online (Sandbox Code Playgroud)

或使用此方法绕过 PhpStorm “在 App\Models 中找不到的方法”:

Table_Name::query()->where('id','=',$id)->first()->column_name;
Run Code Online (Sandbox Code Playgroud)

在查询构建器中:

DB::table('table_names')->find($id)->column_name;
Run Code Online (Sandbox Code Playgroud)

与 where 条款:

DB::table('table_names')->where('id',$id)->first()->column_name;
Run Code Online (Sandbox Code Playgroud)

或者

DB::table('table_names')->where('id',$id)->first('column_name');
Run Code Online (Sandbox Code Playgroud)

最后一个方法结果是数组


小智 13

首先需要创建一个表示该表的Model,然后使用下面的Eloquent方式获取仅2个字段的数据.

Model::where('id', 1)
         ->pluck('name', 'surname')
         ->all();
Run Code Online (Sandbox Code Playgroud)


Har*_*hil 9

从 laravel 5.3 only using get()method 您可以获得表的特定列:

YouModelName::get(['id', 'name']);
Run Code Online (Sandbox Code Playgroud)

或者从 laravel 5.4 开始,您还可以使用all()method 来获取您选择的字段:

YourModelName::all('id', 'name');
Run Code Online (Sandbox Code Playgroud)

使用上述两种方法,get()或者all()您也可以使用,where()但两者的语法不同:

模型::全部()

YourModelName::all('id', 'name')->where('id',1);
Run Code Online (Sandbox Code Playgroud)

模型::get()

YourModelName::where('id',1)->get(['id', 'name']);
Run Code Online (Sandbox Code Playgroud)


Ali*_*aza 8

如果你想从数据库中获取单个值

    Model::where('id', 1)->value('name');
Run Code Online (Sandbox Code Playgroud)


小智 6

use App\Table;
// ...
Table::where('id',1)->get('name','surname');
Run Code Online (Sandbox Code Playgroud)

如果没有

Table::all('name','surname');
Run Code Online (Sandbox Code Playgroud)


ber*_*gle 5

你也可以使用 pluck。

Model::where('id',1)->pluck('column1', 'column2');
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`pluck()` 的效率低于所讨论的其他方法,因为它不会修改 `SELECT ...` 查询,而是对已经返回的结果集进行操作。 (6认同)

ale*_*ela 5

您可以使用get()以及all()

ModelName::where('a', 1)->get(['column1','column2']);
Run Code Online (Sandbox Code Playgroud)


小智 5

要从表中获取特定列的结果,我们必须指定列名。

使用以下代码:-

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

例如 -

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


小智 5

要获取多列(返回集合):

Model::select('name','surname')->where('id', 1)->get();
Run Code Online (Sandbox Code Playgroud)

如果您想将列作为数组获取,请使用以下代码:

Model::select('name','surname')->where('id', 1)->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

如果您想获得单个列,请尝试以下操作:

Model::where('id', 1)->first(['column_name'])->column_name;
Run Code Online (Sandbox Code Playgroud)