> Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库进行交互。 ## Active Record 是什么? 1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field; 2. ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD; 3. ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑; ## Active Record 模式 Active Record 模式出自 Martin Fowler 写的《企业应用架构模式》一书。在 Active Record 模式中,对象中既有持久存储的数据,也有针对数据的操作。Active Record 模式把数据存取逻辑作为对象的一部分,处理对象的用户知道如何把数据写入数据库,还知道如何从数据库中读出数据。 ## 对象关系映射 对象关系映射(ORM)是一种技术手段,把应用中的对象和关系型数据库中的数据表连接起来。使用 ORM,应用中对象的属性和对象之间的关系可以通过一种简单的方法从数据库中获取,无需直接编写 SQL 语句,也不过度依赖特定的数据库种类。 ## 用作 ORM 框架的 Active Record Active Record 提供了很多功能,其中最重要的几个如下: * 表示模型和其中的数据; * 表示模型之间的关系; * 通过相关联的模型表示继承层次结构; * 持久存入数据库之前,验证模型; * 以面向对象的方式处理数据库操作。 ## Active Record 中的“多约定少配置”原则 使用其他编程语言或框架开发应用时,可能必须要编写很多配置代码。大多数 ORM 框架都是这样。但是,如果遵循 Rails 的约定,创建 Active Record 模型时不用做多少配置(有时甚至完全不用配置)。Rails 的理念是,如果大多数情况下都要使用相同的方式配置应用,那么就应该把这定为默认的方式。所以,只有约定无法满足要求时,才要额外配置。 ## 命名约定 默认情况下,Active Record 使用一些命名约定,查找模型和数据库表之间的映射关系。Rails 把模型的类名转换成复数,然后查找对应的数据表。例如,模型类名为 Book,数据表就是 books。Rails 提供的单复数转换功能很强大,常见和不常见的转换方式都能处理。如果类名由多个单词组成,应该按照 Ruby 的约定,使用驼峰式命名法,这时对应的数据库表将使用下划线分隔各单词。因此: * 数据库表名:复数,下划线分隔单词(例如 book_clubs) * 模型类名:单数,每个单词的首字母大写(例如 BookClub) 模型/类|表/模式 ---------|-------------- Article|articles LineItem|line_items Deer|deers Mouse|mice Person|people ## 模式约定 根据字段的作用不同,Active Record 对数据库表中的字段命名也做了相应的约定: * 外键:使用 singularized_table_name_id 形式命名,例如 item_id,order_id。创建模型关联后,Active Record 会查找这个字段; * 主键:默认情况下,Active Record 使用整数字段 id 作为表的主键。使用 Active Record 迁移创建数据库表时,会自动创建这个字段; 还有一些可选的字段,能为 Active Record 实例添加更多的功能: * created_at:创建记录时,自动设为当前的日期和时间; * updated_at:更新记录时,自动设为当前的日期和时间; * lock_version:在模型中添加乐观锁; * type:让模型使用单表继承; * (association_name)_type:存储多态关联的类型; * (table_name)_count:缓存所关联对象的数量。比如说,一个 Article 有多个 Comment,那么 comments_count 列存储各篇文章现有的评论数量;
上一篇:Laravel路由解析 下一篇:PHP命名空间解析
如果这篇文章帮助到了您,可以赞助下主机费~~
赞赏
爽歪歪
11111