laravel 之 Eloquent 模型修改器和序列化示例

修改器

获取

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
 public function getFirstNameAttribute($value) {
  return ucfirst($value);
 }
}

使用 Laravel 加密器 来加密一个被保存在数据库中的值,当你从 Eloquent 模型访问该属性时该值将被自动解密。

$user = App\User::find(1);
$firstName = $user->first_name;

修改

public function setFirstNameAttribute ($value) {
 $this->attributes['first_name'] = strtolower($value);
}
$user = App\User::find(1);
$user->first_name = 'Sally';

日期转化器

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
 protected $dates = [
  'created_at',
  'updated_at',
  'deleted_at'
 ];
}
$user = App\User::find(1);
$user->deleted_at = Carbon::now();
$user->save();

可在属性上使用任何 Carbon 方法:

$user = App\User::find(1);
echo $user->deleted_at->getTimestamp();

设置时间格式

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model {
 protected $dateFormat = 'U';
}

属性类型转化

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
 protected $casts = [
  'is_admin' => 'boolean',
 ];
}

现在当你访问 is_admin 属性时,它将会被转换成布尔值,即便保存在数据库里的值是一个整数:

$user = App\User::find(1);
if ($user->is_admin) {
 //
}

支持的转换的类型有:

integer
real
float
double
string
boolean
object
array
collection
date
datetime
timestamp

# protected $casts = [
#  'options' => 'array',
# ];

$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();

序列化模型或集合

序列化成数组

$user = App\User::with('roles')->first();
return $user->toArray();

序列化成 JSON

$user = App\User::find(1);
return $user->toJson();
// 或者
return (string) $user; // 自动调用 toJson
// 或者
return App\User::all();

隐藏来自 json 的属性

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
 protected $hidden = ['password'];
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
 protected $visible = ['first_name', 'last_name'];
}

临时隐藏

return $user->makeVisible('attribute')->toArray();
return $user->makeHidden('attribute')->toArray();

添加参数到 json 中

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
 protected $appends = ['is_admin'];
}
# 在 appends 数组中的属性也遵循模型中 visible 和 hidden 设置
public function getIsAdminAttribute() {
 return $this->attributes['is_admin'] == 'yes';
}

以上这篇laravel 之 Eloquent 模型修改器和序列化示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Laravel 关联模型-关联新增和关联更新的方法

    网上找了 Laravel 相关的关联新增和关联更新文档,写的都不是很满意.(基本都在抄文档)下面整理下自己代码中的关联操作方法 按照 Laravel 文档中的说明设置关联模型 参考地址 //病人模型 class Patient extends Model { /** * 病人附表 * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function patientdata () { return $this->ha

  • Laravel框架模型的创建及模型对数据操作示例

    本文实例讲述了Laravel框架模型的创建及模型对数据操作.分享给大家供大家参考,具体如下: 模型创建: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Admin extends Model{ //指定表名 protected $table = 'wd_user'; //指定允许批量复制的字段 protected $fillable = ['username']; //指定id protected $prim

  • 使用laravel的Eloquent模型如何获取数据库的指定列

    使用Laravel的ORM--Eloquent时,时常遇到的一个操作是取模型中的其中一些属性,对应的就是在数据库中取表的特定列. 如果使用DB门面写查询构造器,那只需要链式调用select()方法即可: $users = DB::table('users')->select('name', 'email as user_email')->get(); 使用Eloquent的话,有两种方式: 使用select() $users = User::select(['name'])->get()

  • laravel 之 Eloquent 模型修改器和序列化示例

    修改器 获取 <?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { public function getFirstNameAttribute($value) { return ucfirst($value); } } 使用 Laravel 加密器 来加密一个被保存在数据库中的值,当你从 Eloquent 模型访问该属性时该值将被自动解密. $user = App\User:

  • Laravel框架Eloquent ORM修改数据操作示例

    本文实例讲述了Laravel框架Eloquent ORM修改数据操作.分享给大家供大家参考,具体如下: 这篇文章主要讲述两个知识点 通过模型更新 结合查询语句批量更新 NO.1模型更新 在更新之前我先让你们看一下我的数据库 里面共有四条数据,好,那么我们先使用模型更新,更新我的第四条数据,代码如下: namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class StudentCo

  • Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()

    Laravel 5.5 Linux mint 18 PHPStorm 最近刚玩Laravel,手册源码还没来得及看完就跃跃欲试做了个小项目,其中有个需求是分组查询数据库中的一个字段并返回每个分组中的数量,还是去翻手册(手册确实够简单): groupBy 和 having 方法可用来对查询结果进行分组.having 方法的用法和 where 方法类似: $users = DB::table('users') ->groupBy('account_id') ->having('account_id

  • Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例

    本文实例讲述了Thinkphp5.0框架使用模型Model的获取器.修改器.软删除数据操作.分享给大家供大家参考,具体如下: 一.获取器 在model中使用 get+字段名+Attr,可以修改字段的返回值. 数据库中性别保存为,0未知.1男.2女,查询时返回汉字: model: //将性别的012修改为未知.男.女返回 public function getSexAttr($val){ switch($val){ case '1' : return '男'; case '2': return '

  • Laravel 手动开关 Eloquent 修改器的操作方法

    测试框架版本是 Laravel 6.5, Eloquent 修改器使用可以参阅 -> 查看文档 修改器的手动开关的场景就是差异化的返回数据,例如在后台管理的时候,图片地址要相对路径,然后 app 端期望返回全路径的地址,这个时候就需要手动开启和关闭了. 大概操作就是在模型中声明一个静态变量,然后修改器中判断这个静态变量值是 true/false; 如果是 true 则处理,如果为 false 就不处理,具体操作: public static $modify = true; /** * 获取用户的

  • Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解

    本文实例讲述了Laravel框架Eloquent ORM简介.模型建立及查询数据操作.分享给大家供大家参考,具体如下: 注:以下知识点可能有不全面之处,望见谅 NO.1Eloquent ORM简介 Laravel所自带的Eloquent ORM是一个优美.简洁的ActiveRecord实现,用来实现数据库操作 每个数据表都有与之相对应的"模型(Model)"用于和数据交互 NO.2模型的建立 最基础的模型代码如下: namespace App; use Illuminate\Datab

  • laravel学习教程之存取器

    前言 Laravel是一个简单优雅的PHP Web开发框架,可以将开发者从意大利面条式的代码中解放出来,通过简单.高雅.表达式语法开发出很棒的Web应用,那下面跟着小编一起来学习laravel中的存取器吧. Eloquent: 存取器简介 访问器和存储器允许你在获取或者设置 Eloquent 模型属性值时对其进行格式化操作.比如,你可能希望当一个值存储进数据库之前先对其进行 Laravel encrypter 进行加密操作,并且可以在你通过模型访问的时候自动的进行该属性的解密. 除了可自定义的的

  • laravel 解决Eloquent ORM的save方法无法插入数据的问题

    学习laravel中: 今天在测试使用Eloquent ORM将数据使用 save()方法插入到mysql中时,出现了错误,如图所示: 在网上查阅资料后找到了原因: 使用save方法新增数据: laravel会默认维护 created_at , updated_at 两个字段,这两个字段都是存储时间戳,整型11位的,因此使用时需要在数据库添加这两个字段.如果不需要这个功能,只需要在模型里加一个属性:public $timestamps=false; 以及一个方法,可以将当前时间戳存到数据库 pr

  • Laravel框架Eloquent ORM新增数据、自定义时间戳及批量赋值用法详解

    本文实例讲述了Laravel框架Eloquent ORM新增数据.自定义时间戳及批量赋值用法.分享给大家供大家参考,具体如下: 好了,这篇文章我们主要掌握以下几个知识点 通过模型新增数据(涉及到自定义时间戳) 使用模型的Create方法新增数据(涉及到批量赋值) NO.1通过模型新增数据 我的数据库和上篇文章结尾的数据库样式是一致的,那么我要想在这里面输入一个名字叫做ChenChai,年龄是为17岁.要如何操作呢? 代码如下: namespace App\Http\Controllers; us

随机推荐