【Laravel】Eloquent ORM的底层实现

动机

首先来说一个Eloquent ORM的设计思想:Eloquent ORM就是将数据库中复杂的数据结果封装成更加smart的接口提供给用户使用。数据库中每一个表对应一个类,而类的实例对应数据库表中的一行记录,数据库中的列值会对应到类的属性上。一直在使用这个东西,之前并没有深入去了解过,借这个机会查阅了Laravel底层的源码。

笔者的环境:Laravel5.5, Sublime编辑器(强烈建议按转代码提示插件)。

模型类的创建


先创建一个简单的例子用来跟踪底层的代码,Controller与Model对应如下:

namespace App\Http\Controllers;

use App\Article;

class ArticleController extends Controller
{
    public function index() 
    {
        dd(Article::all());
    }
}
namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model 
{

}
     注意:路由就不出来了。

模型类的实现原理


新创建的类什么都没有做,却可以实现对数据库的相关操作,关键点就是它继承了Illuminate\Database\Eloquent\Model。分阶段介绍:第一阶段是Eloquent ORM查询构造器的生成,第二阶段是数据库操作方法的执行。

Eloquent ORM查询构造器的生成


英文不好有些地方借助了翻译软件加上自己的理解些的注释
文件 \Illuminate\Database\Eloquent\Model.php;
/**
     * Get all of the models from the database.
     *
     * @param  array|mixed  $columns
     * @return \Illuminate\Database\Eloquent\Collection|static[]
     */
 //从数据库表中获取所有模型
 public static function all($columns = ['*'])
    {
        return (new static)->newQuery()->get(
            is_array($columns) ? $columns : func_get_args()
        );
    }

/**
     * Create a new Eloquent model instance.
     *
     * @param  array  $attributes
     * @
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值