了解Laravel 8集合

111 阅读2分钟

了解Laravel 8集合

Laravel框架有许多功能,可以缓解开发。这篇文章将重点介绍Laravel集合。我们将建立一个简单的项目来展示这个组件的全部功能。

前提条件

要跟随这篇文章,你需要一些Laravel和PHP的基本知识。

教学目的

本教程将帮助你了解Laravel集合,以及如何在一个Web项目中实现它们。

定义Laravel集合

Laravel集合可以被看作是PHP数组的修改版本。它们位于Illuminate\Support\Collection 目录中,并提供了一个封装器来处理数据数组。

我们使用下面的代码片断来创建Laravel集合。

//creating a test for collection for insights
public function collect(){
    //return the collection in uppercase
    return collect(['john', 'doe', null])->map(function ($test_name) {
        return strtoupper($test_name);
    })->reject(function ($test_name) {
        return empty($test_name);
    });
}

输出。

["JOHN", "DOE"] # output displayed on the browser

在上面的代码片段中, 我们使用collect() 方法从定义的数组中创建一个Collection 实例。

然后我们将每个元素修改为大写字母,并删除空元素。Laravel集合允许我们使用几种方法来分析数据。

创建Laravel集合

我们可以使用两种主要的方式来创建一个Laravel集合。

  1. 使用collect() 方法。
<?php
........................
//using the collect() helper
public function test_helper_collection(){
    $my_test_array=['john','doe'];
    return collect($my_test_array);
}
............................................

在上面的代码中, 我们声明了一个数组,并将其传递给collect() 帮助方法,然后创建Laravel集合。

  1. 使用一个Collection 类的实例.
<?php
...........................................
//using the Collection instance
    public function test_collection_instance(){
        $my_test_array=['john','doe'];
        return new Collection($my_test_array);
}
..............................

在上面的代码中, 我们实例化了Illuminate\Support\Collection 类并包含了我们的数组.然后,该类将数组转换为一个集合。

Eloquent ORM集合

ORM(Object Relational Mapping)是一种数据库操作技术。因此,我们将使用Eloquent ORM ,将这些数据作为一个集合返回。

让我们创建一个简单的数据库与假数据,并尝试使用Laravel集合来操作它。

第一步是编辑我们项目的environmental variables, 如下图所示:

..............................................
DB_CONNECTION=mysql # we're using MySQL but you can modify it to meet your requirements
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=collections
DB_USERNAME=EnterYourUsername
DB_PASSWORD=EnterYourDBPassword
...............................................

现在, 让我们把我们的User 表作为种子, 如下所示:

# create user seeder
php artisan make: seeder UserSeeder

然后编辑database/seeders/userSeeder ,如下所示。

<?php
............................................
/**
 * here, we are running the database seeds to create random users.
 *
 * @return void
 */
public function run()
{
    ................................................
    // 
    DB::table('users')->insert([
        //generate random string name with 8 characters
        'name' => Str::random(8),
        //generate random string email with 6 characters
        'email' => Str::random(6).'@gmail.com',
        //hasing the password
        'password' => Hash::make('password'),
    ]);
}
.....................................

database/seeders/DatabaseSeeder 文件中, 添加以下代码:

<?php
..............................................
/* When you run db: seed, this is the seeder run by default
*
* @return void
*/
public function run()
{
    // call UserSeeder upon seeding your database
    $this->call([
        UserSeeder::class,
    ]);
}

现在我们可以通过运行下面的命令对数据库进行播种。

 php artisan db:seed

 # expected seeding output
Seeding: Database\Seeders\UserSeeder
Seeded:  Database\Seeders\UserSeeder (72.82ms)
Database seeding completed successfully.
# if you don't get this output, check if you have added the UserSeeder in the DatabaseSeeder call method

由于我们已经设置了我们的逻辑,现在让我们查询我们的数据库以返回所有的用户。

 //get users from db
public function get_db_users(){
    dd(User::all());
}

输出。

Collections Output

在上面的图片中,lluminate\Database\Eloquent\Collection {#1210 ▶} 类返回一个集合。因此,我们可以使用不同的方法来分析数据。

寻找数据

在本节中,我们将学习如何在一个集合中寻找数据。

下面将讨论我们可以使用的一些技术。

  1. where() 方法。在这个方法中,我们使用key/value 对过滤一个集合。

让我们创建一个带有数据的集合,并使用where() 方法过滤它。

.................................................
  ///filter a collection using the where() method
public function apply_where_on_collections(){
    $collection = collect([
        ['Tutorial' => 'Laravel Collection', 'price' => 250],
        ['Tutorial' => 'Introduction to Laravel 8', 'price' => 140],
        ['Tutorial' => 'Laravel Cron Jobs', 'price' => 300],
        ['Tutorial' => 'Laravel Tests', 'price' => 400],
    ]);
    //filter to get a tutorial which costs $250.
    $filtered = $collection->where('price', 250);
    //return the result
    return $filtered->all();
}
........................................

结果。

[{"Tutorial":"Laravel Collection","price":250}]
  1. contains() 方法。我们使用contains() 方法来检查一个给定的项目在一个集合中是否可用。

让我们看一下下面的例子。

<?php
..............................
//filter method to check item exisitence
public function apply_contains_on_collections(){
    $collection = collect([
        ['Tutorial' => 'Laravel Collection', 'price' => 250],
        ['Tutorial' => 'Introduction to Laravel 8', 'price' => 140],
        ['Tutorial' => 'Laravel Cron Jobs', 'price' => 300],
        ['Tutorial' => 'Laravel Tests', 'price' => 400],
    ]);
    //returns true/false
    dd($collection->contains('Tutorial','Laravel Collection'));
}
...............................................

输出。

True

在上面的例子中,我们检查了一个项目是否存在于集合中,并根据其可用性返回一个布尔值。

总结

在本教程中, 我们已经学会了如何使用Laravel集合。我们还学习了如何设置一个数据库并使用集合检索数据。

现在你可以使用这些知识来制作高质量的Laravel应用程序。