如何在 Laravel 中获取非关键列字段的不同值?
以下是一些不同的方法,它们可以为 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 )

