ChatGPT解决这个技术问题 Extra ChatGPT

如何在 laravel eloquent 中选择特定的列

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

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

在 laravel eloquent 模型中,它可能看起来像这样

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

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

感谢您提出问题。这太疯狂了,因为我总是在“经典”SQL 查询中正确地做到这一点,但是不得不使用 Eloquent,我发现它太令人困惑了,我很高兴能够让它工作,并且忘记了我的查询使用了多少内存,因为我正在选择一切。
ModelName::findOrFail(1, ['name', 'surname']);

M
Marcin Nabiałek

你可以这样做:

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

假设我想选择每个字段期望一个我该怎么做
首先,当你有问题时,问一个。对于您的情况 - 只需提及所有列而不是您不想包含的列。就这么容易。
在不提及所有列的情况下,是否有其他方法可以做到这一点
这适用于具有单个表的基本情况。但是,如果您在数据透视表上使用关系,那么这也会自动选择数据透视列。
@OPV 它只是运行 SELECT name, surname FROM Table where id = 1 SQL 查询
D
Djave
Table::where('id', 1)->get(['name','surname']);

我想要同样的东西,但使用不同的方法。我想通过创建模型实例来选择方法,然后选择列。即 $model = new MyModel(); $model->select(['col1', 'col2']);但这东西行不通
我相信这是应该使用的方式。我不知道 select() 是否比 get() 快。
也可以是 model::where('col', val)->get(['col1', 'col2']);
S
Sivakumar Tadisetti

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

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

注意:Laravel 5.4


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

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

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

$id 变量可以是一个数组,以防您需要检索模型的多个实例。


这应该是选定的答案。
不知道为什么这不是公认的答案。
M
Mahesh Yadav

您首先需要创建一个代表该表的模型,然后使用以下 Eloquent 方式仅获取 2 个字段的数据。

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

这是最好的答案,因为它也适用于多对多关系中的数据透视表。
这应该是答案
B
Bhagchandani

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


M
Mostafa Asadi

获取一列的值:

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

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

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

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

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

在查询生成器中:

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

与 where 条款:

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

或者

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

最后一个方法结果是数组


a
aleXela

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

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

这个答案应该有更多的选票。
H
Haritsinh Gohil

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

C
Community

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

使用以下代码: -

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

例如 -

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

请在您的答案中添加一些解释,以便其他人可以从中学习
F
Franklin'j Gil'z
use App\Table;
// ...
Table::where('id',1)->get('name','surname');

如果没有在哪里

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

好的答案,但缺少方括号。应该像:->get(['name','surname']);
A
Ali Raza

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

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

@NachoMezzadra 实际上我做到了:):)
b
bereket gebredingle

您也可以使用采摘。

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

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

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

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


M
Md. Jamil Ahsan

您可以通过各种方式获得它。其中一些如下所示 -

//Eloquent: Get specific columns (not all the row). Pluck returns an array.
Model::where('id', 1)->pluck('name', 'surname');
// If you only want to get the result value:
Model::where('id', 1)->value('name');

或者,

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

或者,

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

或者,

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

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

J
Jignesh Joisar

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

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

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

N
Nikola Kirincic

虽然最常见的方法是使用 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_nameusername 的集合,而不仅仅是用户名。

最好单独使用 pluck() 或与 select 组合使用 - 如果您需要特定的列。

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

或者

TableName::where('id', 1)->pluck('username'); //这将返回仅包含 username 值的集合

此外,还可以选择使用 ->toArray() 将集合对象转换为数组。


B
Brane

如果要获取单行并从该行单列,获取特定列的值的一行代码是使用 find() 方法以及指定要检索它的列。

这是示例代码:

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

A
Ali Akbar Afridi

你可以得到它像

`PostModel::where('post_status', 'publish')->get(['title', 'content', 'slug', 'image_url']`)

link


R
Robert Pounder

->get() 很像 ->all()(和 ->first() 等)可以将您想要带回的字段作为参数;

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

将带回集合,但仅使用 column1column2


H
Hemerson Varela

如果您需要直接在模型上调用 pluck 的一列,这是从 Laravel 中的所有模型中检索单个列的最高效的方法。

在 pluck 之前调用 getall 将在提取值之前将所有模型读入内存。

Users::pluck('email');

S
Salman Zafar

您可以使用以下查询:

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

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