假设我在表格中有 7 列,我只想选择其中的两个,就像这样
SELECT `name`,`surname` FROM `table` WHERE `id` = '1';
在 laravel eloquent 模型中,它可能看起来像这样
Table::where('id', 1)->get();
但我猜这个表达式将选择 id 等于 1 的所有列,我只想要两列(姓名,姓氏)。如何只选择两列?
你可以这样做:
Table::select('name','surname')->where('id', 1)->get();
Table::where('id', 1)->get(['name','surname']);
model::where('col', val)->get(['col1', 'col2']);
通过使用 all() 方法,我们可以从表中选择特定的列,如下所示。
ModelName::all('column1', 'column2', 'column3');
注意:Laravel 5.4
您也可以像这样使用 find()
:
ModelName::find($id, ['name', 'surname']);
$id
变量可以是一个数组,以防您需要检索模型的多个实例。
您首先需要创建一个代表该表的模型,然后使用以下 Eloquent 方式仅获取 2 个字段的数据。
Model::where('id', 1)
->pluck('name', 'surname')
->all();
此外 Model::all(['id'])->toArray()
它只会获取 id 作为数组。
获取一列的值:
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');
最后一个方法结果是数组
您可以使用 get() 以及 all()
ModelName::where('a', 1)->get(['column1','column2']);
从 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']);
要从表中获取特定列的结果,我们必须指定列名。
使用以下代码: -
$result = DB::Table('table_name')->select('column1','column2')->where('id',1)->get();
例如 -
$result = DB::Table('Student')->select('subject','class')->where('id',1)->get();
use App\Table;
// ...
Table::where('id',1)->get('name','surname');
如果没有在哪里
Table::all('name','surname');
如果您想从数据库中获取单个值
Model::where('id', 1)->value('name');
您也可以使用采摘。
Model::where('id',1)->pluck('column1', 'column2');
pluck()
的效率低于所讨论的其他方法,因为它不修改 SELECT ...
查询,而是对已返回的结果集进行操作。
您可以使用 Table::select ('name', 'surname')->where ('id', 1)->get ()
。
请记住,当仅选择某些字段时,如果您最终在请求中访问这些其他字段,则必须进行另一个查询(这可能很明显,只是想包含该警告)。包含 id 字段通常是一个好主意,因此 laravel 知道如何写回您对模型实例所做的任何更新。
您可以通过各种方式获得它。其中一些如下所示 -
//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']);
ModelName::find($id, ['name', 'surname']);
你也可以在这里使用findOrFail()
方法很好用
如果未捕获到异常,则会自动将 404 HTTP 响应发送回用户。当使用这些方法不给出 500 错误时,没有必要编写显式检查来返回 404 响应。
ModelName::findOrFail($id, ['firstName', 'lastName']);
虽然最常见的方法是使用 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()
将集合对象转换为数组。
如果要获取单行并从该行单列,获取特定列的值的一行代码是使用 find()
方法以及指定要检索它的列。
这是示例代码:
ModelName::find($id_of_the_record, ['column_name'])->toArray()['column_name'];
你可以得到它像
`PostModel::where('post_status', 'publish')->get(['title', 'content', 'slug', 'image_url']`)
->get()
很像 ->all()
(和 ->first()
等)可以将您想要带回的字段作为参数;
->get/all(['column1','column2'])
将带回集合,但仅使用 column1
和 column2
如果您需要直接在模型上调用 pluck 的一列,这是从 Laravel 中的所有模型中检索单个列的最高效的方法。
在 pluck 之前调用 get
或 all
将在提取值之前将所有模型读入内存。
Users::pluck('email');
您可以使用以下查询:
Table('table')->select('name','surname')->where('id',1)->get();
不定期副业成功案例分享
SELECT name, surname FROM Table where id = 1
SQL 查询