首页 > 其他分享 >掌握Eloquent ORM:Laravel中的对象关系映射艺术

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

时间:2024-07-03 17:29:20浏览次数:19  
标签:Laravel name Eloquent ORM user User

掌握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 = '[email protected]';
$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' => '[email protected]']);

// 批量插入
User::insert([
    ['name' => 'Bob', 'email' => '[email protected]'],
    ['name' => 'Carol', 'email' => '[email protected]']
]);
7. 更新或创建(Upsert)
// 根据条件更新或创建
$affectedRows = User::upsert([
    ['email' => '[email protected]', '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开发中的数据库操作效率和质量。

标签:Laravel,name,Eloquent,ORM,user,User
From: https://blog.csdn.net/2401_85842555/article/details/140157563

相关文章

  • Winform SynchronizationContext多线程更新画面控件
    SynchronizationContext在通讯中充当传输者的角色,实现功能就是一个线程和另外一个线程的通讯。需要注意的是,不是每个线程都附加SynchronizationContext这个对象,只有UI线程是一直拥有的。故获取SynchronizationContext也只能在UI线程上进行SynchronizationContextcontex......
  • laravel 数组元素按中文排序
    1、按英文排序$r=[['color'=>'b','color_zh'=>'波'],['color'=>'c','color_zh'=>'吃'],['color'=>'a','color_zh'=>'啊......
  • Winform数据绑定基类
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Linq;usingSystem.Runtime.CompilerServices;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.Threading;publicabstractclassB......
  • 计算机毕业设计Thinkphp/Laravel高校学生管理系统m4dtg+vue
    Laravel非常的简洁并且是开源的,Laravel是一个具有表现力、优雅语法的Web应用程序框架.Laravel是构建现代全栈Web应用程序的最佳选择.开发语言:php后端框架:Thinkphp/Laravel前端框架:vue.js服务器:apache数据库:mysql运行环境:phpstudy/wamp/xammp等技术路线如下:1.后......
  • Transformer终极教程:一周速成手册
    前言在自然语言处理(NLP)和深度学习领域,Transformer模型无疑是一颗璀璨的明星,自其2017年由Vaswani等人提出以来,便迅速成为众多任务中的首选架构,特别是在机器翻译、文本生成、文本分类、问答系统等任务中展现了强大的性能。本篇文章旨在通过一周的速成学习,带你深入理解Transfo......
  • SOMEIPSRV_FORMAT_27:类型2条目的“保留字段”
    测试目的:验证类型2条目中跟随TTL字段之后的Reserved字段是否被静态设置为0x0000。描述本测试用例旨在确保SOME/IP服务发现协议中,类型2条目格式布局中跟随TTL字段之后的Reserved字段被正确地静态设置为0x0000,特别是对于SubscribeEventgroupAck消息。测试拓扑:具体步骤:D......
  • 一文彻底搞懂Transformer - Input(输入)
    一、输入嵌入(InputEmbedding)        词嵌入(WordEmbedding):词嵌入是最基本的嵌入形式,它将词汇表中的每个单词映射到一个固定大小的向量上。这个向量通常是通过训练得到的,能够捕捉单词之间的语义关系。        在Transformer中,词嵌入层通常是一个可学习的参......
  • DVT:华为提出动态级联Vision Transformer,性能杠杠的 | NeurIPS 2021
    论文主要处理VisionTransformer中的性能问题,采用推理速度不同的级联模型进行速度优化,搭配层级间的特征复用和自注意力关系复用来提升准确率。从实验结果来看,性能提升不错来源:晓飞的算法工程笔记公众号论文:NotAllImagesareWorth16x16Words:DynamicTransformersfor......
  • 关于Mamba和Mamba-2经典论文的学习笔记总结,以及Mamba和Transformer的对比总结,欢迎交流
    最近阅读论文的时候,发现很多基于Mamba改进的CV方向论文,好奇的去了解了一下这个Mamba的起源,以及Mamba-2的提出,简单的对Mamba和Transformer的异同进行了归纳,学到了一些东西,我将从第一部分Mamba的提出背景和结构原理,第二部分Mamba与Transformer的异同,第三部分mamba-2的提出背景......
  • ORM - SqlSugar
    //SqlSugarHelper.DemoDbContext.GenerateModels();varlist=SqlSugarHelper.DemoDbContext.Query<ORMClsLib.dbo.DemoEntity>();varitem=newORMClsLib.dbo.DemoEntity(){operatorName="test",};SqlSugarHelper.DemoDbContext.InsertOrUpdat......