一个微型的PHP实现的AR库
体积很小带详尽的注释总共只有400行
支持链式调用
支持关系
前言
最开始接触ActiveRecord是在学习Yii的时候,那个时候觉得用AR操作数据库真的是太方便了。以至于后来转向其他的一些框架的时候,感觉没有了AR似乎就不能操作数据库了一样!!!特别是中间自己使用一些简单的说不上框架的东西来写微型的PHP站点的时候,感觉手写SQL太难看。
后来也接触过一些优秀的独立的ORM的库,比如我最喜欢的idiorm. 甚至曾经萌生了想要把Yii的AR单独拿出来用的想法!但是后来还是没有实现。。。
在13年的时候,有一段时间上班时间太清闲,所以当时就想自己实现一个ActiveRecord类,一来打算练练手,而来也打算自己以后用的上。
准备
在开始动手写之前,在github,以及stackoverflow上面寻找了一大堆的php的AR库或者ORM的库。
https://github.com/j4mie/idiorm
https://github.com/vrana/notorm
https://github.com/PrimalPHP/Record
https://github.com/spadgos/Record
https://github.com/sgoen/php.pdo.orm
https://github.com/jaceju/example-my-orm
当然其中最好的就是idiorm以及notorm,在github上门分别有1600+和600+的star。
拿idiorm来说,个人非常喜欢它提供的接口以及使用方式。而且整个库也就单个文件,虽然文件将近2500行。但是已经算是一个小型的库了。当然文件有点长,看起来有点费劲。
相对而言notorm设计得更加OO一些。不过在其中的NotORM_Result这个class中明显看到一大片字符串拼接SQL的方式,还是让人觉得看起来不是很好。
设计
在看了一堆这样的ORM的库之后,非常反感那种直接拼接SQL的方式,但是这又是一个无法避开的问题,最后总是需要生成一个SQL字符串的。
关键在于需要找出一种比较”优雅“的方式来完成这个拼接的工作。
表达式
有一天在看拼接的SQL的时候偶然间感觉SQL里面where后面的那些查询条件总是一个一个的表达式(一个操作数加上一个操作符再加上一个操作数,例如:name='demo' and email='demo@demo.com')。
这个表达式的结构看起来和数学里面的(1+1)*(2+2)是那么的相像。
甚至连and,or也是一个一个的操作符而已。再提炼一下除了二元表达式,还有一元表达式(只有一个操作数的表达式,类似数学里面的-1)。这样算起来SQL里面的select,from,where,delete,update这样的关键词都可以算成是”操作符“了。
那么一个简单的SQL就可以分解成一个一个的表达式:
select email, password from `user` where email = 'demo@demo.com';
select email, password
from user
where email = 'demo@demo.com'
email = 'demo@demo.com'
上面的SQL总共拆分出来了4个表达式,其中where部分是嵌套的一个表达式。
实现
Expressions
所以,我专门定义了一个Expressions类用来表示SQL中的各个部分。这个类只有一个__toString方法在最后需要的时候生成SQL
class Expressions extends Base { public function __toString() { return $this->source. ' '. $this->operator. ' '. $this->target; }}
当然还有比较特殊的表达式就是"()",这个表达式特殊在于操作符是分开的。
接口
当提炼出来了表达式的类之后,那么在使用ActiveRecord查询数据库的时候,每输入一个动词,都只是在适当的地方插入一个表达式而已。只有在最后的时候才会一次性的调用每一个表达式的__toString方法组合SQL,为了安全考虑,使用了PDO的绑定参数的形式防止SQL注入的风险!
比如:
$user->equal('id', 1);只是在where子句里面生成了一个 "id=:ph1"的表达式,同时保存了一个array(':ph1'=>1)的参数而已。同样的还提供了简写的”eq“以及”ne“,”ge“等接口函数。另外还有”select“,”from“,”group“,”order“,”limit“,”top“以及”where“等接口函数。
魔术方法
为了减少代码量,所以这里使用了__call魔术方法避免了为每一个动作都去定义个method。
关系
除了实现SQL的基本操作,还实现了一下类似Yii的ActiveRecord法让Relation的方法可以简单的通过主外键关系查询数据。
定义了”HAS_ONE“,”HAS_MANY“和”BELONGS_TO“三种关系。
可以在定义关系之后,能通过简单的的访问属性的方式获得关联的数据。
项目
项目地址:https://github.com/lloydzhou/activerecord
文档地址:https://lloydzhou.github.io/activerecord
已经提交到packagist.org可以通过composer安装
composer require lloydzhou/activerecord
DEMO
为了一边测试,一边完善这个库。所以使用这个库结合另外一个Router和 MicroTpl 写了一个简单的 博客 ,里面基本涵盖了这几个库的API。

종종 키워드와 추적 매개 변수로 혼란스러워하는 긴 URL은 방문자를 방해 할 수 있습니다. URL 단축 스크립트는 솔루션을 제공하여 소셜 미디어 및 기타 플랫폼에 이상적인 간결한 링크를 만듭니다. 이 스크립트는 개별 웹 사이트 a에 유용합니다

Instagram은 2012 년 Facebook에서 유명한 인수에 이어 타사 사용을 위해 두 개의 API 세트를 채택했습니다. Instagram Graph API 및 Instagram Basic Display API입니다. 개발자는

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

이것은 Laravel 백엔드가있는 React Application을 구축하는 데있어 시리즈의 두 번째이자 마지막 부분입니다. 이 시리즈의 첫 번째 부분에서는 기본 제품 목록 응용 프로그램을 위해 Laravel을 사용하여 편안한 API를 만들었습니다. 이 튜토리얼에서는 Dev가 될 것입니다

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

2025 PHP Landscape Survey는 현재 PHP 개발 동향을 조사합니다. 개발자와 비즈니스에 대한 통찰력을 제공하는 프레임 워크 사용, 배포 방법 및 과제를 탐색합니다. 이 조사는 현대 PHP Versio의 성장을 예상합니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Dreamweaver Mac版
시각적 웹 개발 도구
