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


138

可以说我表中有7列,而我只想选择其中的两列,就像这样

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

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

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

但是我想这个表达式会选择id等于1的所有列,而我只需要两列(名称,姓氏)。如何只选择两列?


感谢您提出问题。我一直在“经典” SQL查询中正确地做到这一点,这很疯狂,但是由于不得不使用Eloquent,我感到很困惑,我很高兴自己能够正常工作,并且忘记了查询使用了多少内存,因为我在选择一切。
强尼·佩尔

Answers:


224

您可以这样做:

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

1
让我们假设我要选择每个字段,但我希望如何做到
王子阿罗拉

1
首先,当您有疑问时,请问一个。对于您的情况-仅提及所有列而不是您不想包括的列。就这么简单。
MarcinNabiałek'3

2
没有其他方法可以不提及所有专栏

1
这适用于具有单个表的基本情况。但是,如果您在数据透视表上使用关系,则这还将自动选择数据透视列。
Benubird

1
@OPV它只运行SELECT name, surname FROM Table where id = 1SQL查询
MarcinNabiałek'18

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

37

您也可以find()这样使用:

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

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


24

另外,Model::all(['id'])->toArray()它只会获取id作为数组。



8

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

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

4

您也可以使用采摘。

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

6
请注意,pluck()此方法效率不如所讨论的其他方法,因为它不会修改SELECT ...查询,而是对已经返回的结果集进行操作。
本·约翰逊

4

获取一列的值:

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

型号:: 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();  

请为您的答案添加一些解释,以便其他人可以从中学习
Nico Haase

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'])

将带回集合,但仅与column1column2


1

你也可以用findOrFail()这里方法,很好用

如果未捕获到异常,则会将404 HTTP响应自动发送回用户。使用这些方法不会产生500错误时,无需编写显式检查以返回404响应。

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

1

如果要获取单行并从该行获取单列,则使用一行代码来获取特定列的值 find()在指定要检索的列的同时方法。

这是示例代码:

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

0

您可以使用以下查询:

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

1
请为您的答案添加一些解释,以便其他人可以从中学习
Nico Haase

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.