如何在加载时向 Laravel/Eloquent 模型添加自定义属性?

Barbara Streisand
发布: 2024-11-04 13:15:29
原创
445 人浏览过

How to Add a Custom Attribute to a Laravel/Eloquent Model on Load?

在加载时向 Laravel/Eloquent 模型添加自定义属性

问题分析

在 Laravel/Eloquent 中,自定义属性与模型不直接相关将模型转换为 toArray() 或 JSON 格式时,基础表中的列将被排除。

解决方案

Laravel 8 及更高版本:

使用属性类,用于创建自定义访问器,在对象加载时自动计算和分配属性。

<code class="php">class EventSession extends Eloquent {
  public function availability() {
    return new Attribute(
      get: fn () => $this->calculateAvailability()
    );
  }
}</code>
登录后复制

Laravel 7 及以下版本:

选项 1 : 将属性追加到 $appends 属性

将自定义属性添加到 $appends 数组并定义适当的访问器。

<code class="php">class EventSession extends Eloquent {
  protected $appends = ['availability'];
  public function getAvailabilityAttribute() {
    return $this->calculateAvailability();
  }
}</code>
登录后复制

选项 2:重写 toArray()方法

重写 toArray() 方法并显式设置或迭代自定义属性。

<code class="php">class Book extends Eloquent {
  public function toArray() {
    $array = parent::toArray();
    $array['upper'] = $this->upper;
    return $array;
  }
  public function getUpperAttribute() {
    return strtoupper($this->title);
  }
}</code>
登录后复制

选项 3:循环遍历变异属性

循环模型的变异属性并将它们应用到 toArray() 数组。

<code class="php">class Book extends Eloquent {
  public function toArray() {
    $array = parent::toArray();
    foreach ($this->getMutatedAttributes() as $key) {
      if (!array_key_exists($key, $array)) {
        $array[$key] = $this->{$key};
      }
    }
    return $array;
  }
  public function getUpperAttribute() {
    return strtoupper($this->title);
  }
}</code>
登录后复制

以上是如何在加载时向 Laravel/Eloquent 模型添加自定义属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!