掌握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.mzph.cn/bicheng/41817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程的初步认识

目录 一、硬件方面介绍 1.冯诺依曼体系结构 2.存储分级 二、软件 方面 1.操作系统是一款进行管理的软件,它可以管理硬件也可以管理软件 2.操作系统如何管理? 三、进程 1.概念 总结 四、linux中对进程的管理 1.task_ struct内容分类 2.查看进…

现代信息检索笔记(四)——文档评分、词项权重计算及向量空间模型

目录 对搜索结果进行排序 目标 方案一:jaccard系数 方案二:tf-idf公式 长文本长度 向量空间模型小结 对搜索结果进行排序 排序式检索,如何高速求相关性R 目标 无关的不在上面相关度高的在前面 在链表中不出现的相关性为0&#xff0c…

PageCache页缓存

一.PageCache基本结构 1.PageCache任务 PageCache负责使用系统调用向系统申请页的内存,给CentralCache分配大块儿的内存,以及合并前后页空闲的内存,整体也是一个单例,需要加锁. PageCache桶的下标按照页号进行映射,每个桶里span的页数即为下标大小. 2.基本结构 当每个线程的…

如何使用uer做多分类任务

如何使用uer做多分类任务 语料集下载 找到这里点击即可 里面是这有json文件的 因此我们对此要做一些处理,将其转为tsv格式 # -*- coding: utf-8 -*- import json import csv import chardet# 检测文件编码 def detect_encoding(file_path):with open(file_path,…

Vatee万腾平台:智能生活的新选择

在科技飞速发展的今天,智能生活已经不再是遥不可及的梦想,而是逐渐渗透到我们日常生活的方方面面。Vatee万腾平台,作为智能科技领域的佼佼者,正以其创新的技术、丰富的应用场景和卓越的用户体验,成为智能生活的新选择&…

dc/dc_shell的keep和donot touch区别

donot touch和keep的区别 在半导体设计和综合工具中,donottouch 和 keep 属性通常用于指定综合和布局阶段的特定要求。sizeonly 是 keep 属性的一个可能值。以下是 donottouch 和 keep 属性以及 sizeonly 的区别和用途: donottouch: donotto…

rsync使用教程

1、rsync是什么 rsync是一个在Unix/Linux环境下常用的工具,Windows上可以通过一些替代工具或者使用Cygwin环境来实现类似的功能。Cygwin在安装过程中,选择需要安装的组件时确保选择了rsync和openssh(如果需要通过SSH连接到其他服务器进行备份)。rsync的简单使用如下: rs…

如何引流到私域最有效?

引流到私域最有效的方法通常包括以下几个策略: 1、内容营销: 优质内容创作:制作有价值、有吸引力的内容,如文章、视频、图文等,吸引用户关注。 SEO优化:通过搜索引擎优化,提高内容在搜索引擎…

带流水线的持续连接详解

流水线(Pipeline)的持续连接在网络编程中通常指的是一种能够保持连接持续开放,并允许多个请求在同一个连接上连续发送和接收的技术。这种技术在HTTP/1.1和其他一些网络协议中有应用,目的是提高网络通信效率和性能。HTTP的默认模式…

C++| STL之string

前言:最近在做LeetCode算法题,C字符串通常都是string作为输入,所以补充一下STL里面string。在介绍的具体使用的时候,会补充char字符串相关的进行对比。 string 创建大小和容量遍历字符串比较插入字符拼接字符串分配内存查找截取分…

Java 注入的几种方式

构造函数注入:构造函数注入是最常见的一种依赖注入方式。通过在组件的构造函数中接受依赖参数,并将其保存在私有字段中,可以实现依赖注入。这种方式简单直接,适用于必须的依赖和不变的依赖场景。 public class UserserviceImpl im…

vue学习笔记(购物车小案例)

用一个简单的购物车demo来回顾一下其中需要注意的细节。 先看一下最终效果 功能: (1)全选按钮和下面的商品项的选中状态同步,当下面的商品全部选中时,全选勾选,反之,则不勾选。 &#xff08…

51单片机嵌入式开发:2、STC89C52操作GPIO口LED灯

STC89C52操作GPIO口LED灯 1 芯片介绍1.1 芯片类型1.2 芯片系列说明 2 GPIO引脚寄存器说明3 GPIO操作3.1 GPIO输入3.2 GPIO输出3.3 GPIO流水灯3.4 Protues仿真 4 总结 1 芯片介绍 1.1 芯片类型 芯片采用宏晶科技品牌下的STC89C52RC单片机 选择STC89C52RC系列STC89C58RD系列单片…

Pycharm远程连接GPU(内容:下载安装Pycharm、GPU租借、配置SSH、将代码同步到镜像、命令行操控远程镜像、配置远程GPU解释器)

目录 windows下载安装pycharmGPU租借网站AutoDlfeaturize好易智算 GPU租借GPU选择选择镜像充值 然后创建镜像创建成功 复制SSH登录信息 远程进入镜像 在Pycharm中进行ssh连接新建SFTP配置SSH复制ssh根据复制的信息填写ssh配置测试连接 将代码同步到远程镜像上设置mappings将本地…

大语言模型与知识图谱结合发展方向

引言 在人工智能的发展历程中,大语言模型(LLM)的出现标志着一个重要的转折点。随着深度学习技术的突破和计算能力的提升,LLM以其前所未有的规模和复杂性,开启了迈向人工通用智能(AGI)的新浪潮。…

STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁

在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同…

使用WinSCP工具连接Windows电脑与Ubuntu虚拟机实现文件共享传输

一。环境配置 1.首先你的Windows电脑上安装了VMware虚拟机,虚拟机装有Ubuntu系统; 2.在你的windows电脑安装了WinSCP工具; 3.打开WinSCP工具默认是这样 二。设置WinSCP连接 打开WinSCP,点击新标签页,进入到如下图的…

(杂文)参加WAIC 2024 所思所感

受华为广办的邀请,在领导要求下, 我还是在这个炎热的暑假通过一个接近凌晨两点落地的飞机连夜从北京来到了上海,去“睁眼看世界”。 区别于纯学术会议和CCF类的会议,WAIC 更加的平易近人,有更多的工业界同行&#xff…

【学术会议征稿】2024年工业自动化与机器人国际学术会议(IAR 2024)

2024年工业自动化与机器人国际学术会议(IAR 2024) 2024 International Conference on Industrial Automation and Robotics 2024年工业自动化与机器人国际学术会议(IAR 2024)将于2024年10月18-20日在新加坡隆重召开。会议将围绕…

三丰云评测:免费虚拟主机与免费云服务器的全面对比

三丰云是一家知名的互联网服务提供商,专注于虚拟主机和云服务器的服务。在互联网技术日新月异的今天,选择一个优质的云服务提供商至关重要。本次评测将重点对比三丰云的免费虚拟主机和免费云服务器,帮助用户更好地选择适合自己需求的服务。首…