首页 > 其他分享 >Laravel Model中的$appends

Laravel Model中的$appends

时间:2024-05-13 15:21:45浏览次数:12  
标签:Laravel name 模型 User Model user appends 属性

protected $appends 是 Laravel 模型中的一个属性,用于指定哪些虚拟属性(Accessor)应该被包含在模型的数组或JSON表示中。

虚拟属性是在模型中定义的,通过使用 Accessors 和 Mutators 来访问和修改模型属性的值。这些虚拟属性不会存储在数据库中,但可以通过模型实例进行访问和操作。

当我们使用 toArray()toJson() 方法转换模型实例时,默认情况下只会包含模型的实际数据库字段。如果我们想包含一些虚拟属性,就需要使用 $appends 属性。

举个例子,假设我们有一个 User 模型,其中有一个虚拟属性 full_name:

class User extends Model
{
    protected $appends = ['full_name'];

    public function getFullNameAttribute()
    {
        return $this->first_name . ' ' . $this->last_name;
    }
}

在这个例子中,我们定义了 $appends 属性,将 'full_name' 添加到其中。这意味着当我们转换 User 模型实例时,full_name 属性将被包含在数组或JSON输出中:

$user = User::first();
return $user->toArray(); // 输出中包含 'full_name' 属性
return $user->toJson(); // 输出中包含 'full_name' 属性

使用 $appends 属性可以帮助您更方便地控制模型的输出,包括在API响应中返回虚拟属性。这样可以避免在每次使用模型时都手动调用 getAttribute() 方法来获取虚拟属性的值。

总之,$appends 属性是一个非常有用的功能,可以帮助您更好地管理和定制模型的数据输出。

  • EG
## user.model
 protected $appends = 'humanCreateAt';
 public function getHumenCreateAtAttribute (){
  return $this->create_at->diffForHumans();
}

补充知识

Accessors 和 Mutators 是 Laravel 模型中的两个非常有用的功能,用于自定义模型属性的访问和赋值。

  1. Accessors (访问器)
    Accessors 允许您在返回模型属性值之前对其进行转换或修改。它们通过在模型中定义 get{Attribute}Attribute 方法来实现。
class User extends Model
{
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

$user = User::first();
echo $user->first_name; // 输出: "John"

在上面的例子中,当我们访问 first_name 属性时,Accessor 方法 getFirstNameAttribute 会被调用,并将数据库中保存的值作为参数传递进去。这个方法可以对该值进行修改(如转换为首字母大写)后返回。

  1. Mutators (修改器)
    Mutators 允许您在设置模型属性值之前对其进行转换或验证。它们通过在模型中定义 set{Attribute}Attribute 方法来实现。
class User extends Model
{
    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = bcrypt($value);
    }
}

$user = new User;
$user->password = 'secret'; // 密码会被加密后存储

在上面的例子中,当我们设置 password 属性时,Mutator 方法 setPasswordAttribute 会被调用,并将赋值的 'secret' 字符串作为参数传递进去。这个方法可以对该值进行修改(如加密)后将其存储在模型的 $attributes 属性中。

Accessors 和 Mutators 的主要用途包括:

  1. 数据格式化:将数据库中存储的值转换为更加友好的格式。
  2. 安全性:在存储敏感数据(如密码)时进行加密或哈希。
  3. 业务逻辑:根据其他属性值计算出新的属性值。

通过使用 Accessors 和 Mutators,您可以更好地控制模型属性的读取和赋值过程,提高代码的可读性和可维护性。

如果您有任何其他疑问,欢迎继续询问。

标签:Laravel,name,模型,User,Model,user,appends,属性
From: https://www.cnblogs.com/laraveler/p/18189298

相关文章

  • SciTech-BigDataAIML-TensorFlow-Model: 模型建立与训练
    TensorFlow模型建立与训练TensorFlow模型建立与训练本章介绍如何使用TensorFlow快速搭建动态模型。模型的构建:tf.keras.Model和tf.keras.layers模型的损失函数:tf.keras.losses模型的优化器:tf.keras.optimizer模型的评估:tf.keras.metrics前置知识Python-{zh-......
  • laravel,webman,hyperf,thinkphp推荐哪一个?
    2024年5月11日14:11:45laravelwebmanhyperfthinkphp流行程度国内流行,欧洲特别是法国,美国,日本很多使用主要在国内流行,少量国外使用主要国内流行,少量国外使用国内流行,国外俄罗斯有使用性能fpm多进程模式,性能一般,偏差同步阻塞多进程模式,性能很好web第一梯队协......
  • SciTech-BigDataAIML-TensorFlow-Model的编译:设置(LossFunction+Optimizer+Metrics)与
    机器学习|model.compile()用法model.compile()的作用:为经过设计的Model(神经网络模型)设置好:loss损失函数、optimizer优化器、metrics准确性评价函数。并且进行编译;Optimizers优化器:Optimizer的主要功能是作用在GD(梯度下降)的过程,使得Gradient(梯度)更快(快速......
  • Laravel 实现自定义资源路由
    Laravel如何实现自定义资源路由最近在开发过程中,发现总有一些路由需要重复定义,比如切换状态,导出,回收站啊之类的。如果使用Laravel自带的资源路由方法,还不足以满足重复劳动得过程。所以是否有方法可以自定义项目得资源路由呢?在Laravel中,资源路由一般有两种服务端渲染Route:......
  • Laravel Schedule 中的 dailyAt 是如何工作的
    LaravelSchedule中的dailyAt是如何工作的业务逻辑中通过dailyAt​指定了一个每天都需要执行的定时任务:$schedule->call(function(){//业务逻辑})->dailyAt('14:29');‍​Illuminate\Console\Scheduling\ManagesFrequencies​中的dailyAt​方法,最终是生成......
  • 关于diffusion model一些统计和数学的基础知识
    likelihood-basedmodels,通过(近似)最大似然直接学习分布的probabilitydensity(或mass)函数。典型的基于似然的模型包括自回归模型、归一化流模型、基于能量的模型(EBMs)和变分自编码器(VAEs)。概率质量函数(ProbabilityMassFunction,PMF):概率质量函数用于描述离散随机变量的概率......
  • REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS
    发表时间:2023(ICLR2023)文章要点:文章提出一个简单有效的ReAct框架,将reasoning和action结合,在交互式的环境上进行测试,取得了很好的效果。其中reasoning作为推理模块,帮助模型归纳,跟踪和更新动作规划,acting和环境交互收集更多信息(reasoningtraceshelpthemodelinduce,track,a......
  • PHP框架Laravel+Vue3+前后端分离开发模式+实战项目
    1、本实战项目采用前后端分离的开发模式,前端框架vue3,后端框架laravel10。所谓的前后端分离的开发,就是有别于利用cookie,session的基于会话机制的开发模式;前后端分离的开发模式是基于jwt的开发模式,也就是说后端的接口数据不仅可以支持web页面,也可以支持微信小程序,公众号,app等移动端......
  • "基础模型时代的机器人技术" —— Robotics in the Era of Foundation Models
    翻译:2023年是智能机器人规模化的重要一年!对于机器人领域之外的人来说,要传达事物变化的速度和程度是有些棘手的。与仅仅12个月前的情况相比,如今人工智能+机器人领域的大部分景观似乎完全不可识别。从学术界到初创公司再到工业研究实验室,2023年带来了一波研究进展,迫使许多人更新了......
  • 【Modelsim问题】# ** Error: (vsim-3170) Could not find 'lab1_tb'.
     #**Error:(vsim-3170)Couldnotfind'lab1_tb'. testbench文件名与其中module 后紧跟的名称不匹配......