3分钟短文:Laravel ORM 模型用法纲要
引言
前两期为了说明laravel框架提供的数据库操作能力 , 直接使用DB门面操作 , 而没有引入更为强大的eloquentorm功能 。 从本期开始 , 我们就分次把eloquent的一些简要知识点 , 为大家提炼演示一下 。 主要以代码为主 , 配以简要说明 。

文章图片
学习时间
【3分钟短文:Laravel ORM 模型用法纲要】Eloquent其实是一个ActiveRecord类型的ORM 。 这是一个位于数据库操作之上的一个中间层 , 不仅仅是对于整张表的操作 , 更能细化到每行记录的增删改查 。
创建一个模型类非常简单 , 只用继承系统的模型就可以了:
useIlluminateDatabaseEloquentModel;classContactextendsModel{}
因为遵循的是约定大于配置的惯例 , 所以上述模型如不指定表名 , 默认就是默认数据库的contacts表了 。
对于数据库插入新条目 , 则可以便捷地使用模型的方法执行 , 比如下面这样:
publicfunctionsave(Request$request){$contact=newContact();$contact->first_name=$request->input('first_name');$contact->last_name=$request->input('last_name');$conatct->email=$request->input('email');$contact->save();returnredirect('contacts');}
创建一个合约 , 并使用传入的表单数据填充 。 接着是使用模型对数据的查询:
publicfunctionshow($contactId){returnContact::findOrFail($contactId);}
这里有一个语法糖 , 就是findOrFail , 如果找到就返回一个模型 , 找不到就返回默认错误页面 。 上述方法会对Contact模型调用toArray方法进行格式化 , 然后返回一个JsonResponse对象的响应体 。
如果返回的模型想要手动定制一下 , 那么在查询结果集中 , 使用Collection提供的格式化功能就好了 。
publicfunctionvips(){returnContact::where('vip',true)->get()->map(function($contact){$contact->formalName=''Theexalted{$contact->first_name}ofthe{$contact->last_name}s'';return$contact;});}
大家注意 , get方法返回的是一个EloquentCollection , 包含了Model模型的集合 。 所以使用map遍历集合元素时 , 每个元素其实都是一个独立的Contact对象 , 直接给对象追加属性就可以增加字段了 。
创建模型
除了上面我们使用手动创建模型文件之外 , laravel还为我们提供了命令行方式快捷创建 。 使用下面的指令:
phpartisanmake:modelContact
这样会在App命名空间下生成一个标准的模型文件Contact.php , 内容如下:
namespaceApp;useIlluminateDatabaseEloquentModel;classContactextendsModel{//}
如果数据库表还没有创建 , 你想要把迁移文件的骨架代码也生成出来 , 只需在生成指令上追加参数如下:
phpartisanmake:modelContact--migration
有些时候 , 我们维护一些数据库和表 , 想要动态切换某个模型所对应的数据库表 , 那么只需在模型文件内手动指定表名即可:
protected$table='contacts_secondary';
如果你使用的主键不是id , 是自定义的字段名 , 那也可以手动指定:
protected$primaryKey='contact_id';
这个contact_id是系统维护 , 而非自增的 , 你需要显式声明不要自增这个字段:
public$incrementing=false;
如果创建的表内有created_at,updated_at等等标准字段 , 而在数据库表的字段默认值内允许为NULL , 或者默认为NULL 。 你想要他们自动更新为当前系统时间 , 只需要添加这个配置项:
public$timestamps=false;
存储的日期时间格式 , 也可以自定义:
protected$dateFormat='YmdHis';
好了 , 关于模型的基本属性和常用方法 , 也就这些了 。
写在最后
本文通过演示laravel框架模型创建 , 以及通过演示默认配置项到自定义配置内容 , 为大家展示了Model所具备的一些很赞的特性 。
Happycoding:-)
我是@程序员小助手 , 持续分享编程知识 , 欢迎关注 。
推荐阅读
- 3分钟就能做好的营养早餐,味道鲜美口感好,小孩爱吃极了!
- 鸡蛋这样做太香了,不用蒸不用煎,早餐端上桌,3分钟就光盘,香
- 早餐迷上吃饼,不揉面不擀面,3分钟出锅,比包子油条好吃多了
- 最下饭的快手菜! 3分钟就能出锅, 连吃3大碗饭都嫌少!
- 花卷不要再蒸着吃了,试试着样做,3分钟就出锅,宣软又酥脆!
- 比烧烤还好吃孜然鱿鱼须,香辣可口,3分钟学会,吃上就停不下来
- 安乐死过山车|全球第一个安乐死过山车,3分钟结束生命,至今无人活着下来!
- 成本不足4元,盐都不放,上桌3分钟光盘,不愧是经典名菜
- 3分钟学会5种丸子的做法,超全,照着做成功率极高!
- 冰箱里刚拿出的冻肉,千万别拿水泡!教你1招,3分钟把冻肉解冻
