laravel学习笔记--Eloquent模型

66 篇文章 4 订阅
本文详细介绍了Laravel框架中的Eloquent ORM,包括如何创建和管理模型,以及如何与数据库进行交互。内容涵盖模型生成、表名和主键自定义、时间戳处理、数据查询、数据插入、更新、批量操作及删除等核心功能。通过对Eloquent的深入理解,开发者能更高效地进行数据库操作。
摘要由CSDN通过智能技术生成

Laravel 的 Eloquent ORM 提供了一个漂亮、简洁的 ActiveRecord
实现来和数据库交互。每个数据库表都有一个对应的「模型」用来与该表交互

创建模型

  php artisan make:model Flight

生成的模型会保存在通常在app\Models目录中

还可以在生成模型的时候生成数据库迁移
常用的一种方式,创建模型的同时再去生成迁移文件
使用 --migration 或 -m

php artisan make:model Flight --migration

php artisan make:model Flight -m

Eloquent 模型约定

默认数据库
默认情况下,模型与数据库名是对应的。它使用类的复数形式「蛇形命名」来作为表名,如Flight模型对应的数据库是flights

通过在模型上定义 table 属性来指定自定义数据表

class Flight extends Model
{
    /**
     * 与模型关联的表名
     *
     * @var string
     */
    protected $table = 'my_flights';
}

每个模型默认的键都是id,并且是自增的整型

定义一个受保护的 $primaryKey 属性来重写约定

class Flight extends Model
{
    /**
     * 与表关联的主键
     *
     * @var string
     */
    protected $primaryKey = 'flight_id';
}

默认时间戳
默认情况下,Eloquent 预期你的数据表中存在 created_at 和 updated_at 两个字段

如果不想让 Eloquent 自动管理这两个列, 那么就将模型中的 $timestamps 属性设置为 false

class Flight extends Model
{
    /**
     * 是否主动维护时间戳
     *
     * @var bool
     */
    public $timestamps = false;
}

如果需要自定义时间戳的格式,在你的模型中设置 $dateFormat 属性。这个属性决定日期属性在数据库的存储方式

class Flight extends Model
{
    /**
     * 模型日期的存储格式
     *
     * @var string
     */
    protected $dateFormat = 'U';
}

模型检索

创建模型和 它关联的数据库表后,你就可以从数据库中查询数据了
例如,查询所有数据

$data = Flight::all();
dd($data);

由于每个模型都充当一个 查询构造器,所以也可以添加查询条件,然后使用 get 方法获取查询结果

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

在模型中插入数据

要往数据库新增一条记录,先创建新模型实例
给实例设置属性,然后调用 save 方法

 $flight = new Flight();
 $flight->name = '大信';
 $res = $flight->save();

在模型中,默认是自动写入时间戳的。created_at 和 updated_at 时间戳将会自动设置,不需要手动赋值

使用模型更新数据

更新模型,你需要先检索出来,设置要更新的属性,然后调用 save 方法。同样,updated_at 时间戳会自动更新,所以也不需要手动赋值

$data = Flight::find(1);
$data->name = '大大信';
$res = $data->save();

批量更新

 Flight::where('name', '=', '大信')->update([
            'name' => '啊信'
        ]);

批量添加数据或赋值
使用 create 方法来保存新模型

不过,在使用之前,需要在模型上指定 fillableguarded 属性,因为所有的 Eloquent 模型都默认不可进行批量赋值。

class Flight extends Model
{
    /**
     * 可批量赋值属性
     *
     * @var array
     */
    protected $fillable = ['name'];
}

一旦我们设置好了可以批量赋值的属性,就可以通过 create 方法插入新数据到数据库中了

create 方法将返回保存的模型实例

Flight::create([
            'name'=>'小信',
        ]);

如果你想让所有属性都可以批量赋值, 你可以将 $guarded 定义成一个空数组

/**
 * 不可批量赋值的属性
 *
 * @var array
 */
protected $guarded = [];

使用insert批量添加数据

Flight::insert([
            ['name' => '猪八戒'],
            ['name' => '孙悟空']
        ]);

值得一提的是,insert并不会通过模型去添加数据。而create是通过模型处理的

如果是已经有一个模型实例的情况,可以传递一个数组给 fill 方法来赋值
这是一种比较常见的方式,不用一个一个设置属性赋值

$flight->fill(['name' => 'Flight 22']);

删除模型

可以在模型实例上调用 delete 方法来删除实例

$data = Flight::find(1);
$res = $data->delete();

通过主键删除模型

如果知道了模型的主键,可以直接使用 destroy 方法来删除模型,而不用先去数据库中查找

App\Models\Flight::destroy(1);

destroy 方法除了接受单个主键作为参数之外,还接受多个主键,或者使用数组、集合来保存多个主键

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小信啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值