如何在 Laravel 中获取非关键列字段的不同值?

laravelphpserver side programming更新于 2025/4/30 2:22:17

以下是一些不同的方法,它们可以为 Laravel 中的非关键列字段提供不同的值。假设我们创建了一个名为 students 的表,并执行以下查询

CREATE TABLE students( 
   id          INTEGER        NOT NULL      PRIMARY KEY, 
   name        VARCHAR(15)    NOT NULL, 
   mail        VARCHAR(20)    NOT NULL, 
   created_at  VARCHAR(27), 
   updated_at  VARCHAR(27), 
   address     VARCHAR(30)    NOT NULL 
);

并按如下所示填充

+----+---------------+------------------+-----------------------------+-----------------------------+---------+ 
| id |          name |            email |           created_at        |       updated_at            | address | 
| 1  | Siya  Khan    | siya@gmail.com   | 2022-05-01T13:45:55.000000Z | 2022-05-01T13:45:55.000000Z | Xyz     | 
| 2  | Rehan Khan    | rehan@gmail.com  | 2022-05-01T13:49:50.000000Z | 2022-05-01T13:49:50.000000Z | Xyz     | 
| 3  | Rehan Khan    | rehan@gmail.com  |           NULL              | NULL                        | testing | 
| 4  | Rehan         | rehan@gmail.com  |           NULL              | NULL                        | abcd    |
+----+---------------+------------------+-----------------------------+-----------------------------+---------+

使用 Model Eloquent

Eloquent 是一种新的对象关系映射器 (ORM),可帮助与数据库进行交互。使用 Eloquent,每个表都有一个映射模型,负责处理该表上的所有操作。

Laravel 中的 Model 表示数据库中的表。例如,如果您有表 customers,则模型名称将为 customer,对于 users,它将为 user,employees 它将为 employee。表名必须是复数,模型名称必须是单数。这是遵循的模式,但这并不妨碍您使用您选择的表名和模型名的命名约定。

示例

在控制器中使用 student 模型,如下例所示 -

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::select('name')->distinct()->get()->toArray(); print_r($student); } }

在上面的例子中,distinct() 方法用于从"students"表中获取不同的值。

输出

上述查询的输出如下所示 −

Array(
   [0] => Array(
      [name] => Siya Khan
   )
   [1] => Array(
      [name] => Rehan Khan
   )
   [2] => Array(
      [name] => Rehan
   )
)

使用 distinct() 函数

distinct() 方法将返回表中的唯一值。它的 SQL 查询如下 −

SELECT distinct name from students;

您还可以在模型 eloquent 上使用 distinct() 方法,如下所示 −

示例

namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::distinct()->get(['name'])->toArray(); print_r($student); } }

Outout

上述代码的输出是 −

Array(
   [0] => Array(
      [name] => Rehan
   )
   [1] => Array(
      [name] => Rehan Khan
   )
   [2] => Array(
      [name] => Siya Khan
   )
)

使用 groupby() 方法

groupby() 方法有助于根据给定的字段名称对值进行分组。使用 groupby 的语法如下 −

odel::select('fieldname')->groupBy('fieldname')

SQL 查询如下 −

SELECT name FROM students GROUP BY name;

示例

您还可以使用 groupby()方法,如下所示 −

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::select('name')->groupBy('name')->get()->toArray(); print_r($student); } }

输出

上述代码的输出是 −

Array ( 
   [0] => Array ( 
      [name] => Rehan 
   )
   [1] => Array ( 
      [name] => Rehan Khan 
   )
   [2] => Array ( 
      [name] => Siya Khan 
   )

使用 unique() 方法

unique() 方法将返回表中存在的唯一值。使用 unique() 方法的语法如下 −

Model::all()->unique('fieldname')

示例

unique() 方法如下例所示 −

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::all()->unique('name')->toArray(); print_r($student); } }

输出

上述代码的输出如下 −

Array(
   [0] => Array(
      [id] => 1
      [name] => Siya Khan
      [email] => siya@gmail.com
      [created_at] => 2022-05-01T13:45:55.000000Z
      [updated_at] => 2022-05-01T13:45:55.000000Z
      [address] => Xyz
   )

   [1] => Array(
      [id] => 2
      [name] => Rehan Khan
      [email] => rehan@gmail.com
      [created_at] => 2022-05-01T13:49:50.000000Z
      [updated_at] => 2022-05-01T13:49:50.000000Z
      [address] => Xyz
   )

   [3] => Array(
      [id] => 4
      [name] => Rehan
      [email] => rehan@gmail.com
      [created_at] =>
      [updated_at] =>
      [address] => abcd
   )
)

示例

使用 DB Facade

让我们在控制器中使用 DB Facade,如下所示。将使用 distinct() 方法从学生表中获取不同的姓名。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; class StudentController extends Controller{ public function index() { $stdDetails = DB::table('students')->distinct()->get(['name'])->toArray(); print_r($stdDetails); } }

输出

上述代码的输出是 −

Array ( 
   [0] => stdClass Object ( 
      [name] => Siya Khan 
   )
   [1] => stdClass Object( 
      [name] => Rehan Khan 
   )
   [2] => stdClass Object ( 
      [name] => Rehan 
   )
)

示例

在学生表上使用 groupBy() 方法。示例如下 −

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; class StudentController extends Controller{ public function index() { $stdDetails = DB::table('students')->select('name')->groupBy('name')->get()->pluck('name')->all(); print_r($stdDetails); } }

输出

上述代码的输出如下

Array(
   [0] => Rehan
   [1] => Rehan Khan
   [2] => Siya Khan
)

相关文章