PHP

关于laravel中model的一些常用小操作

野牛哥
2021-07-26 / 0 评论 / 198 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年09月23日,已超过35天没有更新,若内容或图片失效,请留言反馈。

关于laravel中model的一些常用小操作

在日常开发中,经常会用到model的一些属性或者方法之类的,下面来讲下关于model的一些知识要点.

一、自动在Models文件夹下创建Model

它在apps/Models文件夹下面创建一个Demo Model文件节省你的创建文件夹的时间(路径根据自己情况而定)

php artisan make:model Models/Demo 
二、$cast 属性 显示字段类型转换
protected $casts = [
    'is_free' => 'boolean'
];

这将is_free字段转换为boolean类型,无论你是在查询还是插入的还是更新的时候都会转换为boolean类型。

$article->created_at->format('Y-m-d');

还可以这样定义

 protected $casts = [
    'updated_at' => 'datetime:Y-m-d',
    'created_at' => 'datetime:Y-m-d H:i:s', 
];
三、设置字段的默认值

在更新内容或者新增内容的时候,有些字段是想给个默认值, 但又不想在插入或者更新时写这个字段

 protected $attributes = [
    'number'=>999,
    'price'=>0,
]; 
四、可见性

在查询内容的时候, 有些字段是不想显示出来, 这是后就可以使用可见性进行控制, 例如密码字段。

//隐藏密码字段和手机号码字段
protected $hidden = [
    'password',phone
]; 
//显示指定字段
 protected $visible = [
    'name',
    'mail'
]; 

五、访问器

访问器的作用是什么呢,比如我们工作中经常会用到订单状态,例如status字段取值1代表刚下单2代表已支付3代表以发货4代表已取消,那么我们前端显示的时候往往需要显示的的订单状态描述,而不是1,2,3,4。这时候访问器就用上了。访问器有固定的方法名格式:

// 要求大驼峰写法(首字母大写)
get[UserName]Attribute

举个例子,比如我们要回去订单状态描述信息

function getOrderStatusAttribute()
{
    $res = [1=>'新创建',2=>'已支付',3=>'已发货',4=>'已取消'];
    return $res[$this->status] ?? 'status error.'
}
//当我们调用的时候也要注意格式需要写成下划线的形式调用
$obj->order_status;
六、修改器

对添加和更新数据的时候所指定的字段进行操作,例如将名字的第一个字母大写

public function setLastNameAttribute($value) {
    $this->attributes['last_name'] = ucfirst($value);
}
echo $obj->last_name= 'apple'; //保存到库里的内容将是Apple
七、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字段

八、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的结果集
]; 
九、fillable白名单

在开发中,有些字段没有到添加白名单里,然后在更新或者新增的记录的时候就会发现这个字段并没有变化.

protected $fillable = [
    'phone','username','sex','address'
];
十、关闭开始默认时间戳

如果你得表没有created_at和updated_at这两个字段的,可以关闭默认的created_at和updated_at,只有两个选项true/false,默认是开启的(可以省略不写)

public $timestamps = false; // 关闭
十一、修改表名

在数据库中创建了wish表,laravel默认是会给表名加上复数s的,这时候就需要手动更改表名.

public $table = 'wish';
十二、修改数据库连接

在开发中,有时候需要指定一下数据库的连接,需要在config/database.php里提前定义好连接名

protected $connection='mysql2';

一些常用的模型操作基本都在这里了,剩下的不常用的可以去看文档

本文共 818 个字数,平均阅读时长 ≈ 3分钟
4

打赏

评论 (0)

取消