零、什么是 Eloquent
Eloquent 是 Laravel 的 \'ORM\',即 \'Object Relational Mapping\',对象关系映射。ORM 的出现是为了帮我们把对数据库的操作变得更加地方便。
Eloquent 让一个 \'Model类\' 对应一张数据库表,并且在底层封装了很多 \'function\',可以让 Model 类非常方便地调用。
来看一段如下代码:
<?php class Article extends \\Eloquent { protected $fillable = []; }
\'protected $fillable = [];\' 这一行代码在这里没有任何价值,是 generator 自动生成的,在此我们不做讨论。
这个类简直再简单不过了,没有指定命名空间,没有构造函数,如果那一行没有意义的代码也不算上的话,这个文件就只有两个有实际意义的东西: \'Article\' 和 \'\\Eloquent\'。没错,Eloquent 就是这么屌炸天,只需要继承一下 Eloquent 类,就可以干 \'first() find() where() orderBy()\' 等非常非常多的事情,这就是面向对象的强大威力。
一、Eloquent 基本用法
Eloquent 中文文档在:http://laravel-china.org/docs/eloquent
废话不多说,下面我将直接展示 Eloquent 的几种常见用法的代码。
找到 id 为 2 的文章打印其标题
$article = Article::find(2); echo $article->title;
查找标题为“我是标题”的文章,并打印 id
$article = Article::where(\'title\', \'我是标题\')->first(); echo $article->id;
查询出所有文章并循环打印出所有标题
$articles = Article::all(); // 此处得到的 $articles 是一个对象集合,可以在后面加上 \'->toArray()\' 变成多维数组。 foreach ($articles as $article) { echo $article->title; }
查找 id 在 10~20 之间的所有文章并打印所有标题
$articles = Article::where(\'id\', \'>\', 10)->where(\'id\', \'<\', 20)->get(); foreach ($articles as $article) { echo $article->title; }
查询出所有文章并循环打印出所有标题,按照 updated_at 倒序排序
$articles = Article::where(\'id\', \'>\', 10)->where(\'id\', \'<\', 20)->orderBy(\'updated_at\', \'desc\')->get(); foreach ($articles as $article) { echo $article->title; }
基础使用要点
1. 每一个继承了 Eloquent 的类都有两个 \'固定用法\' \'Article::find($number)\' \'Article::all()\',前者会得到一个带有数据库中取出来值的对象,后者会得到一个包含整个数据库的对象合集。
2. 所有的中间方法如 \'where()\' \'orderBy()\' 等都能够同时支持 \'静态\' 和 \'非静态链式\' 两种方式调用,即 \'Article::where()...\' 和 \'Article::....->where()\'。
3. 所有的 \'非固定用法\' 的调用最后都需要一个操作来 \'收尾\',本片教程中有两个 \'收尾操作\':\'->get()\' 和 \'->first()\'。
二、中间操作流
Builder 这个单词可以直译成构造器,但是“中间操作流”更容易理解,因为数据库操作大部分时候都是链式操作的。
中间操作流,请看代码:
Article::where(\'id\', \'>\', 10)->where(\'id\', \'<\', 20)->orderBy(\'updated_at\', \'desc\')->get();
这段代码的 `::where()->where()->orderBy()` 就是中间操作流。中间操作流用面向对象的方法来理解,可以总结成一句话:
创建一个对象,并不断修改它的属性,最后用一个操作来触发数据库操作。
如何找到中间操作流的蛛丝马迹
中间操作流这个东西,文档里几乎没有任何有价值的信息,那么,我们该怎么找出这个玩意儿呢?很简单,使用以下代码:
$builder = Article::where(\'title\', \"我是标题\")->title;
然后你就会看到下面的错误:
为什么会出现错误?因为 `Article::where()` 了之后依然是 `Builder` 对象,还不是 `Article` 对象,不能直接取 `title`。
“终结者”方法
所谓 “终结者” 方法,指的是在 N 个中间操作流方法对某个 Eloquent 对象进行加工以后,触发最终的数据库查询操作,得到返回值。
`first()` `get()` `paginate()` `count()` `delete()` 是用的比较多的一些 “终结者” 方法,他们会在中间操作流的最后出现,把 SQL 打给数据库,得到返回数据,经过加工返回一个 Article 对象或者一群 Article 对象的集合。
复杂用法示例
Article::where(\'id\', \'>\', \'100\')->where(\'id\', \'<\', \'200\')->orWhere(\'top\', 1)->belongsToCategory()->where(\'category_level\', \'>\', \'1\')->paginate(10);
本文地址:https://www.stayed.cn/item/16241
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我