理解 Laravel Eloquent ORM

php中文网
发布: 2016-06-20 12:40:39
原创
1022人浏览过

什么是 eloquent

eloquent 是 laravel 的 'orm',即 'object relational mapping',对象关系映射。orm 的出现是为了帮我们把对数据库的操作变得更加地方便。eloquent 让一个 'model类' 对应一张数据库表,并且在底层封装了很多 'function',可以让 model 类非常方便地调用。所有的 eloquent 模型都继承于 illuminate\database\eloquent\model。

通过 make:model 命令自动生成 Eloquent 模型:

php artisan make:model Article -m
登录后复制

-m 参数:自动为这个模型生成对应的 articles表

php artisan make:migration create_articles_table --create=articles
登录后复制

为模型创建一个对应的表(=后面指定表名)

注意:我们并没有告诉 Eloquent 模型会使用哪个数据库表。若没有特别指定,系统会默认自动对应名称为「类名称的小写复数形态」的数据库表。所以,在上面的例子中, Eloquent 会假设 Article 模型将把数据存在 articles 数据库表。您也可以在类中定义 table 属性自定义要对应的数据库表。

class User extends Model {    protected $table = 'your_table';}
登录后复制

批量赋值

在建立一个新的模型时,由于盲目地将用户输入写入模型数据,可能会造成 严重的安全隐患。基于这个理由,所有的 Eloquent 模型默认会阻止批量赋值 。

fillable属性指定了哪些字段支持批量赋值 。可以设定在类的属性里或是实例化后设定。

class Article extends Model {    protected $fillable = ['title', 'content', 'email'];}
登录后复制

在上面的例子里,只有三个属性(表中的字段)允许批量赋值。

guarded与 fillable相反,是作为「黑名单」而不是「白名单」:

class Article extends Model {    protected $guarded = ['id', 'password'];}
登录后复制

上面的例子中, id 和 password 属性不会被批量赋值,而所有其他的属性则允许批量赋值。您也可以使用 guard 属性阻止所有属性被批量赋值

钉钉 AI 助理
钉钉 AI 助理

钉钉AI助理汇集了钉钉AI产品能力,帮助企业迈入智能新时代。

钉钉 AI 助理 21
查看详情 钉钉 AI 助理

hidden属性指定那些字段被隐藏了,即输出了也不会被看到

class Article extends Model {    protected $hidden = ['id', 'password'];}
登录后复制

基本用法

多看看文档

找到id为2的并且打印其标题

$article = Article::find(2);echo $article->title;
登录后复制

有时, 您可能想要在找不到模型数据时抛出异常,通过 firstOrFail 方法。

$article = Article::findOrFail(100);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()。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号