Laravel 5.5 Eloquent ORM - 快速入门

简介

Laravel 内置的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现。

每张数据表都对应一个与该表进行交互的模型(Model),通过模型类,你可以对数据表进行查询、插入、更新、删除等操作。

定义模型

我们从创建一个 Eloquent 模型开始,模型类默认位于 app 目录下,但推荐将模型存放在 app/Models 目录下。

所有 Eloquent 模型都继承自 Illuminate\Database\Eloquent\Model 类。

创建模型最简单的方法就是使用 Artisan 命令 make:model。

php artisan make:model Test

上述命令会自动生成 app/Test.php 模型文件。

为了将模型存放到 app/Models 目录,在使用 Artisan 命令 make:model 时,可以在模型名称的前面加上一个相对目录名 Models/。

php artisan make:model Models/Test

这样,就会自动生成 app/Models/Test.php 模型文件。内容如下:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    //
}

如果你想要在生成模型时生成数据库迁移,可以使用 --migration 或 -m 选项:

php artisan make:model User --migration
php artisan make:model User -m

Eloquent 模型约定

现在,让我们来看一个 Flight 模型的例子,我们将用该类获取和存取数据表 flights 中的信息:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    //
}

表名

在本例中,我们并没有明确指定 Flight 模型使用哪张表。

默认规则是小写的模型类名的复数格式作为与其对应的表名(除非在模型类中明确指定了数据表的名称)。

所以,在本例中,Eloquent 认为 Flight 模型对应的是 flights 表。

你也可以在模型中定义 table 属性来指定自定义的表名。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * 与模型对应的数据表
     *
     * @var string
     */
    protected $table = 'my_flights';
}

主键

Eloquent 默认每张表的主键名为 id,你可以在模型类中定义一个 $primaryKey 属性来覆盖该约定。

此外,Eloquent 默认主键字段是自增的整型数据,这意味着主键将会被自动转化为 int 类型,如果你想要使用非自增或非数字类型主键,必须在对应模型中设置 $incrementing 属性为 false,如果主键不是整型,还要设置 $keyType 属性值为 string。

时间戳

默认情况下,Eloquent 期望 created_at 和 updated_at 已经存在于数据表中。

如果你不让 Laravel 自动管理这些字段,就在模型类中设置 $timestamps 属性为 false。

public $timestamps = false;

如果你需要自定义时间戳格式,就设置模型中的 $dateFormat 属性。该属性决定日期被如何存储到数据库中,以及模型被序列化为数组或 JSON 时日期的格式。

protected $dateFormat = 'U';

如果你需要自定义用于存储时间戳的字段名称,可以在模型中设置 CREATED_AT 和 UPDATED_AT 常量:

const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';

数据库连接

默认情况下,所有的 Eloquent 模型使用应用配置中的默认数据库连接,如果你想要为模型指定不同的连接,可以通过 $connection 属性来设置。

protected $connection = 'connection-name';

获取模型

创建完模型及其关联的数据表后,就可以从数据库中获取数据了。

将 Eloquent 模型看作功能强大的查询构建器,你可以使用它来流畅的查询与其关联的数据表。

<?php

use App\Flight;

$flights = App\Flight::all();

foreach ($flights as $flight) {
    echo $flight->name;
}

Eloquent 的 all 方法返回模型表的所有结果,由于每一个 Eloquent 模型都是一个查询构建器,你还可以添加约束条件到查询,然后使用 get 方法获取对应结果。

$flights = App\Flight::where('active', 1)
               ->orderBy('name', 'desc')
               ->take(10)
               ->get();

注:由于 Eloquent 模型本质上就是查询构建器,你可以在 Eloquent 查询中使用查询构建器的所有方法。

集合

对于 Eloquent 中获取多个结果的方法(比如 all 和 get)而言,其返回值是 Illuminate\Database\Eloquent\Collection 的一个实例,Collection 类提供了多个有用的函数来处理 Eloquent 结果集。

$flights = $flights->reject(function ($flight) {
    return $flight->cancelled;
});

当然,你也可以像数组一样循环遍历该集合:

foreach ($flights as $flight) {
    echo $flight->name;
}

组块结果集

如果你需要处理数据量很大的 Eloquent 结果集,可以使用 chunk 方法。chunk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值