如何在laravel eloquent中选择特定列
假设表中有7列,我只想选择其中的两列,如下所示如何在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的所有列,我只
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');