关于Laravel model 你需要知道的7个小操作

关于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的结果集
]; 

打赏 赞(4)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据