关于Laravel model 你需要知道的7个小操作
1、自动在Models文件夹下创建Model
php artisan make:model Models/Product
这将在apps/Models文件夹下面创建一个Product Model文件节省你的创建文件夹的时间
2、$cast 属性 显示字段类型转换
protected $casts = [ 'is_published' => 'boolean' ];
这将is_published字段转换为boolean类型,无论你是在查询还是插入的还是更新的时候都会转换为boolean类型。
还记得$obj->created_at,$obj->updated_at 返回的是一个对象吗,而不是我们想要的时间字符串,我们以前的实现方案是这样的。
$blog->created_at->format('Y-m-d')
现在我们可以这样定义使用了,应该会更方便。
protected $casts = [ 'updated_at' => 'datetime:Y-m-d', 'created_at' => 'datetime:Y-m-d H:i:s', ];
3、可见性
有些时候们查询内容的时候,有些字段是不想显示出来,这是后就可以使用可见性进行控制,例如密码字段。
//隐藏密码字段和手机号码字段
protected $hidden = [
'password',phone
];
//显示指定字段 protected $visible = [ 'name', 'mail' ];
注意当设置了 visible属性后,其他未指定的字段都将不显示。
4、访问器
访问器的作用是什么呢,比如我们工作中经常会用到订单状态,例如status字段取值1代表刚下单2代表已支付3代表以发货4代表已取消,那么我们前端显示的时候往往需要显示的的订单状态描述,而不是1,2,3,4。这时候访问器就用上了。访问器有固定的方法名格式:
get[NameOfAttribute]Attribute
//举个例子,比如我们要回去订单状态描述信息 function getOrderStatusAttriute() { $statusArray = [1=>'新创建',2=>'已支付',3=>'已发货',4=>'已取消']; return $statusArray[$this->status] ?? 'status error.' } //当我们调用的时候也要注意格式需要写成下划线的形式调用 $obj->order_status;
5、设置器
对添加和更新数据的时候所指定的字段进行操作,例如将名字的第一个字母大写
public function setLastNameAttribute($value) { $this->attributes['last_name'] = ucfirst($value); }
$obj->last_name= ‘wang’; //保存到库里的内容将是Wang
注意设置器的方法名格式也有要求
6、touches
简单理解就是自动更新关联模型的 BelongsTo 或者 BelongsToMany 的updated_at时间戳。例如:
class Comment extends Model { protected $touches = ['blog']; public function blog() { return $this->belongsTo(App\Blog::class); } }
当Comment Model 更新的时候也会自动更新blog关联的Blog Model的updated_at字段
7、appends
向结果集中添加自定义字段 例如:
function getFullNameAttribute() { return $this->first_name . $this->last_name; } $appends = [ 'full_name', //添加一个自定义的full_name字段,首先要定义full_name的访问器 'blogs:id,title', //添加blogs结果集中的id和title字段,如果不指定字段则添加这个blogs关联model的结果集 ];