Eloquent模型基本操作
Eloquent 是 Laravel 的 ‘ORM’,即 ‘Object Relational Mapping’,对象关系映射。ORM 的出现是为了帮我们把对数据库的操作变得更加地方便。
查找id为1的文章:1
$article = Article::find(1);
查找标题为“你好”的文章:1
$article = Article::where('title', '你好')->first();
查询出所有文章:1
$articles = Article::all(); // 此处得到的 $articles 是一个对象集合,可以在后面加上 '->toArray()' 变成多维数组。
查找 id 在 10~20 之间的所有文章:1
$articles = Article::where('id', '>', 10)->where('id', '<', 20)->get();
Builder构造器
Illuminate\Database\Eloquent\Builder
Builder构造器有人翻译成“中间工作流”,因为数据库操作大部分都是链式操作,如:1
Article::where('id', '>', 10)->where('id', '<', 20)->orderBy('updated_at', 'desc')->get();
注意:如果直接用 :: 访问function,无论这个function是否为static,是不会调用构造函数 __construct(),所以Article::where()
之后呢依然是Builder
对象,而不是Article
对象,如果直接调用Article属性,就会报错1
Article::where('title', '你好')->title ; // 这是错误的
那么就需要在N个中间操作流最后加上“终结者”方法,触发最终的数据库查询操作。first()
、 get()
、 paginate()
、count()
、 delete()
是用的比较多的一些 “终结者” 方法,他们会在
中间操作流的最后出现,把 SQL 打给数据库,得到返回数据
模型关联
1 | // 文章模型 |
可以这样调用1
2$article = Article::find(2)->hasOneCategory ; // @1
echo $article->name ;
也可以1
2$collection = Article::find(2)->hasOneCategory()->get(); // @2
echo $collection[0]->name ;
二者不同在于 @1 操作的是一个模型 , @2 返回的是对象集合
如果是hasMany
操作,只能使用 @2 的方式。
转换成数组/JSON
我们在构建JOSN API时,常需要把模型和关联对象转化为数组或者json,lluminate\Database\Eloquent\Model
包含了toArray
和toJson
;1
2
3Article::find(2)->toArray();
Article::find(2)->toJson();