如何在laravel eloquent中选择特定列

如何在laravel eloquent中选择特定列,laravel,laravel-5,orm,eloquent,Laravel,Laravel 5,Orm,Eloquent,假设表中有7列,我只想选择其中的两列,如下所示 SELECT `name`,`surname` FROM `table` WHERE `id` = '1'; Table::where('id', 1)->get(); 在laravel雄辩的模型中,它可能是这样的 SELECT `name`,`surname` FROM `table` WHERE `id` = '1'; Table::where('id', 1)->get(); 但我猜这个表达式将选择id等于1的所有列,我只

假设表中有7列,我只想选择其中的两列,如下所示

SELECT `name`,`surname` FROM `table` WHERE `id` = '1';
Table::where('id', 1)->get();
在laravel雄辩的模型中,它可能是这样的

SELECT `name`,`surname` FROM `table` WHERE `id` = '1';
Table::where('id', 1)->get();

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

您可以这样做:

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

您可以使用
Table::select('name','姓氏')->where('id',1)->get()


请记住,当仅为某些字段选择时,如果您在请求中稍后访问这些其他字段,则必须进行另一个查询(这可能很明显,只是希望包含该警告)。包括id字段通常是一个好主意,这样laravel知道如何写回您对模型实例所做的任何更新。

另外
model::all(['id'])->toArray()
它将仅以数组的形式获取id

您首先需要创建一个表示该表的模型,然后使用下面雄辩的方法仅获取两个字段的数据

Table::where('id', 1)->get(['name','surname']);
Model::where('id', 1)
         ->pluck('name', 'surname')
         ->all();
通过使用all()方法,我们可以从如下表中选择特定的列

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

注意:Laravel 5.4

您可以使用以下查询:

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

你也可以用弹拨

Model::where('id',1)->pluck('column1', 'column2');
您可以使用get()和all()

要从表中获取特定列的结果,必须指定列名。 使用以下代码:-

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

$result = DB::Table('Student')->select('subject','class')->where('id',1)->get();  
->get()
很像
->all()
(和
->first()
等…)可以将要带回的字段作为参数

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


将带回集合,但只能使用
column1
column2

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

Table::select('name','surname')->where('id', 1)->get();
ModelName::find($id, ['name', 'surname']);
$id
变量可以是一个数组,以防您需要检索模型的多个实例。

您也可以在此处使用方法最好使用

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


虽然最常用的方法是使用
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);
    }
}

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

以下是示例代码:

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

从laravel 5.3中,仅使用
get()
方法,您可以获得表的特定列:

YouModelName::get(['id', 'name']);
或者从laravel 5.4中,您也可以使用
all()
方法获取您选择的字段:

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

Model::all()

模型::get()


获取一列的值:

Table_Name::find($id)->column_name;
可以将此方法与where子句一起使用:

Table_Name::where('id',$id)->first()->column_name;
或者使用此方法绕过PhpStorm“在App\Models中找不到的方法”:

在查询生成器中:

DB::table('table_names')->find($id)->column_name;
使用where cluase:

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

最后一个方法结果是数组

use App\Table;
// ...
Table::where('id',1)->get('name','surname');
如果没有,在哪里

Table::all('name','surname');

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

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

    Model::where('id', 1)->value('name');


让我们假设我想选择除一个字段之外的所有字段。首先,当你有问题时,问一个。对于你的情况,只需提及所有列,而不是你不想包括的列。就这么简单。没有其他方法可以做到这一点而不提及所有列吗?这适用于一个具有单个表的基本情况。但是,如果您在数据透视表上使用关系,那么这也会自动选择数据透视列。@OPV它只是运行
select name,names FROM table,其中id=1
SQL query我想要相同的东西,但使用不同的方法。我想通过创建模型实例来选择方法,然后选择列。i、 e$model=新的MyModel()$模型->选择(['col1','col2']);但是这个东西不起作用。我想要同样的东西,但使用不同的方法。我想通过创建模型实例来选择方法,然后选择列。i、 e$model=新的MyModel()$模型->选择(['col1','col2']);但是这个东西不起作用,我相信这就是它应该被使用的方式。但是我不知道select()是否比get()快。请注意,
pluck()
的效率低于其他讨论的方法,因为它不会修改
select…
查询,而是,它对已经返回的结果集进行操作。这是最好的答案,因为它也适用于多对多关系中的透视表。感谢您提出这个问题。这很疯狂,因为我总是在“经典”SQL查询中正确地执行此操作,但不得不使用雄辩,我发现它太令人困惑了,我很高兴它能够正常工作,并且忘记了我的查询使用了多少内存,因为我选择了所有内容;请在你的答案中添加一些解释,以便其他人可以从中学习。请在你的答案中添加一些解释,以便其他人可以从中学习。这应该是选定的答案。这对me@Froxz那为什么不投票呢?:)@NachoMezzadra事实上我做了:):)回答得好,但缺少方括号。应该是这样的:->get(['name','姓氏]);
Table::all('name','surname');
    Model::where('id', 1)->value('name');