掌握Eloquent ORM:Laravel中的对象关系映射艺术

掌握Eloquent ORM:Laravel中的对象关系映射艺术

在现代Web应用开发中,数据库的操作是核心功能之一。Laravel框架提供了一个强大而优雅的ORM(对象关系映射)工具——Eloquent。Eloquent让数据库操作变得简单直观,同时保留了SQL的强大灵活性。本文将详细介绍如何在Laravel中使用Eloquent ORM,包括定义模型、CRUD操作、查询构造器、关联关系等。

1. Eloquent ORM简介

Eloquent是Laravel的ORM,它允许开发者用面向对象的方式来操作数据库。Eloquent提供了一个 ActiveRecord 实现,即每个数据库表都有一个对应的模型类。

2. 定义模型

在Laravel中,每个模型对应一个数据库表。模型类通常位于app/Models目录下。

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // 模型关联的表名
    protected $table = 'users';

    // 模型的主键
    public $primaryKey = 'id';

    // 可填充的属性
    protected $fillable = ['name', 'email'];
}
3. 创建模型

可以使用Laravel的Artisan命令行工具快速创建模型。

php artisan make:model User
4. 基本的CRUD操作

创建(Create)

$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->save();

读取(Read)

$user = User::find(1); // 根据主键查找
$users = User::all(); // 获取所有用户

更新(Update)

$user = User::find(1);
$user->name = 'Jane Doe';
$user->save();

删除(Delete)

$user = User::find(1);
$user->delete();
5. 查询构造器

Eloquent的查询构造器是一个强大的工具,允许构建复杂的查询。

// 获取所有用户的ID和姓名
$users = User::select('id', 'name')->get();

// 条件查询
$users = User::where('email', 'like', '%example.com')->get();

// 链式调用
$users = User::where('id', '>', 10)->orderBy('name')->get();
6. 插入和批量插入
// 插入
User::create(['name' => 'Alice', 'email' => 'alice@example.com']);

// 批量插入
User::insert([
    ['name' => 'Bob', 'email' => 'bob@example.com'],
    ['name' => 'Carol', 'email' => 'carol@example.com']
]);
7. 更新或创建(Upsert)
// 根据条件更新或创建
$affectedRows = User::upsert([
    ['email' => 'unique@example.com', 'name' => 'Unique User']
], ['name', 'email'], ['email']);
8. 关联关系

Eloquent支持定义模型之间的关系,如一对一、一对多、多对多。

class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// 获取用户的帖子
$posts = User::find(1)->posts;
9. 事件

Eloquent模型支持模型事件,如createdupdated等。

class User extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::creating(function ($user) {
            // 在保存新用户之前
        });
    }
}
10. 软删除

Eloquent支持软删除,即在数据库中标记记录为已删除,而不是实际从数据库中删除。

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
}

// 软删除用户
$user->delete();

// 查询包括软删除的记录
$users = User::withTrashed()->get();
11. 结论

Eloquent ORM是Laravel框架中的一个强大工具,它提供了一种优雅的方式来处理数据库操作。通过本文的学习和实践,您应该能够理解Eloquent的基本概念和使用方法,并能够在Laravel项目中灵活运用Eloquent ORM。


本文提供了一个全面的Eloquent ORM使用指南,包括Eloquent的基本概念、模型定义、CRUD操作、查询构造器、插入和批量插入、关联关系、事件、软删除等。希望这能帮助您更好地利用Eloquent ORM,提高Laravel开发中的数据库操作效率和质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770722.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一题——Python实现PAT乙级1026 程序运行时间(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码结构和逻辑 时间复杂度 空间复杂度 代码优化建议 总结 我要更强 …

生物分子生物学实验过程的自动化与智能监控系统设计

开题报告:生物分子生物学实验过程的自动化与智能监控系统设计 一、引言 随着生物科学技术的飞速发展,生物分子生物学实验在科研、医疗、农业等领域的应用日益广泛。然而,传统的生物分子生物学实验过程大多依赖于人工操作,存在操…

组件丰富、支持2/3D数据可视化的编辑器平台软件?

数据可视化编辑器通常用于创建交互式的图表和模型,可以帮助用户以更直观的方式展示数据。一些在线平台软件提供了丰富的组件,支持2D和3D数据可视化: 1、Plotly - 提供了多种语言的库,支持在线创建交互式图表,包括2D和…

【2023ICPC网络赛I 】E. Magical Pair

当时在做洛谷U389682 最大公约数合并的时候我就想到把每个质因子分解出来然后跑高维前缀和,但是那一道题不是用这个方法,所有我也一直在思考这种做法是不是真的有用。因为昨天通过2024上海大学生程序设计竞赛I-六元组计数这道题我了解到了不少关于原根的…

平安养老险安徽分公司:助力乡村振兴 保险知识进农村

为深入宣传普及保险理念,进一步提升服务品质,营造“78全国保险公众宣传日”活动氛围,助力保险业健康稳定发展,近日,平安养老保险股份有限公司(以下简称“平安养老险”)安徽分公司走进安庆市宿松…

智能座舱相关问答

一、基本概念与理解 智能座舱的定义 回答:智能座舱是指在现代交通工具中,通过应用智能技术,实现对乘客座舱环境和服务进行智能化管理和优化的系统。它不仅提供更加舒适的乘坐体验,还能通过精确的数据分析和实时监控,提…

教育行业的网络安全:保护学生数据与防范网络欺凌

在数字化的春风中,教育行业迎来了知识的繁花似锦,然而,随之而来的网络安全风暴也悄然逼近。学生数据的脆弱性与网络欺凌的阴影交织成一幅复杂的画卷,呼唤着教育工作者与技术专家共同编织一张密不透风的网络安全之网。本文深入探讨…

A*——AcWing 178. 第K短路

A* 定义 A算法是一种广泛应用于路径搜索和图遍历的启发式搜索算法,它结合了最好优先搜索和Dijkstra算法的优点,旨在找到从初始节点到目标节点的最短路径。A算法在游戏AI、机器人导航、地图路线规划等领域有广泛应用。 A*算法的核心在于使用一个评估函…

React+TS前台项目实战(二十四)-- 全局常用绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件,是通过传入的信息,绘制在二维码上,可用于很多场景,如区块链项目中的区块显示交易地址时就可以用到…

顶顶通语音信箱手机助手拦截方案(mod_cti基于FreeSWITCH)

文章目录 前言联系我们拦截方案方案一:空号识别拦截拦截时间原理能够识别出的状态 方案二:实时质检拦截拦截时间原理拦截效果展示 服务器配置要求 前言 顶顶通拥有两种语音信箱手机助手拦截方案: 方案一:空号识别拦截&#xff0…

springboot接口防抖【防重复提交】

什么是防抖 所谓防抖,一是防用户手抖,二是防网络抖动。在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。要针对用…

成都百洲文化传媒有限公司电商服务的佼佼者

在当今这个数字化时代,电商已成为商业发展的核心动力之一。成都百洲文化传媒有限公司,作为一家专注于电商服务的领先企业,正以其卓越的服务质量和前瞻性的战略眼光,引领着电商行业的新潮流。 一、公司简介 成都百洲文化传媒有限公…

sssssssssssssssshare_ptrrrrrrrrrrrrrrrrrrrrrrrrr

智能指针——shared_ptr的原理及仿写 shared_ptr的原理及仿写 共享指针允许多个指针指向同一份数据,因为它使用了引用计数,每多一个指针指向这个数据,引用技术加一,每销毁一个指针,引用技术减一,如果引用计…

拓展欧几里得和裴蜀定理

裴蜀定理(或贝祖定理)说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)d,那么对于任意的整数x,y,axby都一定是d的倍数&#xff0c…

【安全攻防】网络安全中的序列化与反序列

1.序列化与反序列化 首先要了解序列化与反序列化的定义,以及序列化反序列化所用到的基本函数。 序列化:把对象转换为字节序列的过程称为对象的序列化,相当于游戏中的存档。 PHP中的序列化函数serialize() **serialize()**函数用于序列化对…

jsqlparse工具拦截sql处理和拓展

前置知识 访问者模式 (Visitor Pattern)是一种行为设计模式,它允许你定义在不改变被访问元素的类的前提下,扩展其功能。通过将操作(操作或算法)从对象结构中提取出来,可以在不修改这些对象的前…

6.基于SpringBoot的SSMP整合案例-业务层开发

目录 1.业务层标准开发 1.1接口定义 1.2实现类定义 1.3测试类定义 1.4小结: 2.业务层快速开发 2.1使用MyBatisP1us提供有业务层通用接口(ISerivce)与业务层通用实现类(ServiceImpl),t> 接口定义: 实现类定义: 测试类: …

MergeBus封装模块

当模型有很多信号进行交互的时候,并且已经无法回避线条交叉的时候,我们会选择 From和Goto模块来提高模型的可读性,假如你拿到的模型如下图: 像不像芯片的电路,错综而复杂 该如何整理呢? 我相信有很多模型…

2024年移动手游趋势:休闲类手游收入逆势增长,欧美玩家成为主力

移动手游广告情报平台Sensor Tower近期发布的报告显示,从宏观数据来看,尽管2023年对于移动游戏市场来说是艰难的一年,无论是总下载量亦或是总收入都较去年有所下降,尤其是Google Play。但在总体下降的大趋势下,休闲游戏…

mac如何压缩视频大小不改变画质,mac怎么压缩视频软件

在数字时代,视频已成为信息传递和娱乐消遣的重要媒介。然而,视频带来的愉悦体验背后,是日益增长的存储和分享压力。大视频文件不仅占用大量存储空间,上传和下载也变得异常缓慢。那么,如何才能有效压缩视频,…