laravel的Eloquent其他笔记
来源:互联网 发布:宁波最新房价走势知乎 编辑:程序博客网 时间:2024/05/16 14:00
1.集合:Eloquent返回的所有的包含多条记录的结果集都是 'Illuminate\Database\Eloquent\Collection' 对象的实例。例如:通过 get(),all()等方法,返回的结果。1>Eloquent对象集合继承自Laraval的集合基类,继承了很多处理Eloquent模型底层数组的方法。all()get()...等各种方法2>集合本身也是迭代器,允许像数组一样对其进行循环。$users = App\User::where('active', 1)->get();foreach ($users as $user) {// 像数组一样进行foreach循环 echo $user->name;}3>集合使用直观的接口提供了各种映射/简化操作,因此比数组更加强大。例如:$users = App\User::where('active', 1)->get();// 集合$names = $users->reject(function ($user) {// reject只筛选出部分集合中的记录 return $user->active === false; })->map(function ($user) {// 筛选后的集合元素,只保留name字段 return $user->name;});可以看到,支持链式操作、回调函数等,很强大!4>Eloquent集合,大多数经过方法的处理,返回的是一个新的Eloquent集合,下列几个方法比较特殊,返回的是 '集合基类实例':pluck()keys()zip()collapse()flatten()flip()5>自定义集合:Laravel为我们提供了一个 'newCollection()' 方法,来自定义集合1)针对每个Eloquent模型类,可使用自定义的集合对象use App\CustomCollection;// 自定义的一个集合对象class User extends Model{ public function newCollection(array $models = [])// 重写 newCollection() 方法,覆盖Model类的newCollection,这样该模型类就使用了自定义的集合对象 { return new CustomCollection($models); }}2)对所有的Eloquent模型类,使用自定义的集合对象直接对Model模型基类,重写 'newCollection()' 方法2.访问器&修改器:访问器 - 获取模型属性时,调用方法处理修改器 - 设置模型属性时,调用方法处理举例:你可能想要使用Laravel加密器对存储在数据库中的数据进行加密,并且在 Eloquent 模型中访问时自动进行解密。1>定义访问器:假设访问Foo字段,就需要定义一个 'getFooAttribute()' 方法。方法名格式是:'get'.属性名.'Attribute'。属性名是数据库字段名的驼峰式写法。例如:first_name ==> getFirstNameAttribute()示例:public function getFirstNameAttribute($value) { return ucfirst($value);// 获取first_name字段时,对该字段进行 'ucfirst' 转换 }使用:App\User::find(1)->first_name; // 获取字段时,自动进行了 'ucfirst()' 转换2>定义修改器同访问器类似,方法名是 'set' 开头。例如:setFooAttribute()示例: public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value);// 将处理后的属性值,赋值给$this->attributes['first_name'] }使用:$user = App\User::find(1);$user->first_name = 'Sally';// 设置时,自动调用了 'strtolower()' 转换3>日期修改器默认,Eloquent将 'created_at' 和 'updated_at' 字段值,转换为 'Carbon' 实例,Carbon继承了PHP原生的 'Datetime' 类,提供了各种时间相关的方法1)定义哪些字段被自动调整为时间,会作为 'Carbon' 实例protected $dates = ['created_at', 'updated_at', 'disabled_at'];2)日期存储格式,默认时间戳格式是 'Y-m-d H:i:s',可通过 $dateFormat 属性修改:protected $dateFormat = 'U';3)设置日期:$user = App\User::find(1);$user->disabled_at = Carbon::now();// 设置日期为当前的时间戳(这里我们调用的是 'Carbon' 的now()方法,未解除laravel前,一般直接使用now()来获取当前时间戳),保存到数据库中,自动转为 '日期格式了',laravel数据库保存时间应该是 '2016-1-8 10:00:00' timestamp格式4)获取日期:$user = App\User::find(1);return $user->disabled_at->getTimestamp();// 看到没,直接在 '$user->disabled_at' 上调用 'getTiemstamp()' 方法,因为 '$user->disabled_at' 是 'Carbon类' 的实例4>属性转换:模型中的$casts属性为属性字段转换到通用数据类型提供了便利方法。例如:protected $casts = ['is_admin' => 'boolean',// 数据库中存储为 '0|1',访问时,自动转为 'false|true'];支持的转换类型:integer, real, float, double, string, boolean, object,array,collection,date和datetime5>数组转换:也是属性转换的一种,特别适合:数组内容的存储。数据库中存储序列化的JSON格式内容,访问时,自动转为array数组格式。示例:protected $casts = [ 'options' => 'array', ]; 类型转换被定义后,访问options属性将会自动从 JSON 反序列化为 PHP 数组,反之,当你设置options属性的值时,给定数组将会自动转化为 JSON 以供存储3.序列化构建Json格式的API接口时,经常需要转换 '模型' 和 '关联关系' 为数组或者JSON。1>转换模型为数组:$user = App\User::with('roles')->first();// 一条记录,是模型实例return $user->toArray();2>转换集合为数组:$users = App\User::all(); // 一个集合,也可以转化为数组return $users->toArray();3>转换模型为JSON:$user = App\User::with('roles')->first();// 一条记录,是模型实例return $user->toJson();4>转换集合为JSON:$users = App\User::all(); // 一个集合,也可以转化为JSONreturn $users->toJson();5>转换模型或集合为字符串时,将会自动调用 'toJson()' 方法:$user = App\User::find(1);return (string) $user;// 强制转换为 string 类型,会自动调用 'toJson',生成json格式字符串6>由于模型和结合在转换为字符串的时候,会转换为JSON,因此,很多api接口,我们可以直接利用这一特性:Route::get('users', function(){return App\User::all();// 返回时,会自动转换为string格式(这里比上面更简单了,都不用使用 '(string)' 强制转换了)});7>在JSON中隐藏属性在模型中定义 $hidden 属性:protected $hidden = ['password'];----注意:----如果要隐藏关联关系,使用关联关系的方法名,而不是动态属性名 ----------- 不懂这个什么意思!!!(2者的名字好像是一样的啊)8>在JSON中显示属性:在模型中定义 $visible 属性:protected $visible = ['first_name', 'last_name'];9>临时暴露隐藏属性:使用 'makeVisible()' 方法,支持链式操作:return $user->makeVisible('attribute')->toArray();10>追加数据库中没有的字段到数组中:目标:添加一个 'is_admin' 到数组中步骤:1)先定义一个访问器:public function getIsAdminAttribute()// 虚拟字段 'is_admin' { return $this->attributes['admin'] == 'yes'; }2)添加字段名到该模型的 '$appends' 属性:protected $appends = ['is_admin'];注意:appends 数组中的字段还会遵循模型中配置的 visible 和 hidden 设置。
0 0
- laravel的Eloquent其他笔记
- laravel的Eloquent模型
- laravel的Eloquent起步
- laravel笔记-Eloquent ORM(基础)
- laravel笔记-Eloquent ORM(杂项)
- laravel的Eloquent关联关系
- laravel的Eloquent ORM操作
- laravel笔记-Eloquent ORM(关联关系)
- laravel学习笔记之Eloquent ORM
- laravel稀罕的Eloquent模型的用法
- 你不知道的Laravel Eloquent技能
- Laravel Eloquent ORM的hasOne和belongsTo
- Laravel Eloquent ORM--整理
- laravel Eloquent ORM
- laravel(三)Eloquent
- Laravel Eloquent ORM--整理
- Laravel Eloquent使用小记
- Laravel Eloquent ORM--整理
- 基于压缩感知机的中文分词学习笔记
- laravel的Eloquent关联关系
- UVa679: dropping balls
- Memcached的简单使用
- Tomcat 安装及其单机多实例部署
- laravel的Eloquent其他笔记
- TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type s
- Android源码设计模式解析与实战
- Caffe-python interface 学习|网络训练、部署、测试
- Share the experience of how to debug dead lock
- 在Android so文件的.init、.init_array上和JNI_OnLoad处下断点
- MongoDB数据库未授权访问漏洞及加固
- Nginx 负载均衡及其 HTTPS 部署
- 面试题之常用–排序算法01