php - 是否可以向 Laravel 模型添加非持久属性?

标签 php laravel lumen eloquent

我正在使用 Laravel (Lumen) 创建一个 API,其中的对象包含一个字段,该字段是一个文件的路径。
这些路径在数据库中存储为相对路径,但在将它们返回给用户时,我必须将它们转换为绝对 url。

现在我想知道是否有一种方便的方法可以将非持久字段添加到模型对象中。明明有Mutators但它们会持久保存到数据库中。

我也想过创建一个后中间件,它遍历对象树并转换它找到的每个 path 字段,但这不是一种优雅的方式。

这是我需要的最终转换:

[
  {
    "id": 1,
    "title": "Some title",
    "media": [
      {
        "id": 435,
        "path": "relative/path/to/some/file.ext"
      },
      {
        "id": 436,
        "path": "relative/path/to/some/file2.ext"
      }
    ]
  }
]

收件人:

[
  {
    "id": 1,
    "title": "Some title",
    "media": [
      {
        "id": 435,
        "url": "http://example.com/relative/path/to/some/file.ext"
      },
      {
        "id": 436,
        "url": "http://example.com/relative/path/to/some/file2.ext"
      }
    ]
  }
]

欢迎任何想法。

最佳答案

您可以使用 Laravel accessors ,

来自Docs :

The original value of the column is passed to the accessor, allowing you to manipulate and return the value.

这些不会持久保存在数据库中,但会在您访问它们时进行修改。

例如:

class User extends Model
{
    /**
     * Get the user's first name.
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

用法:

$user = App\User::find(1);

$firstName = $user->first_name;

在您的用例中:

媒体模型中为路径属性定义一个访问器。

public function getPathAttribute($value)
{
    return storage_path($value);
}

如果您需要访问具有不同名称(别名)的属性:

public function getAliasAttribute()
{
    return storage_path($this->attributes['path']);
}
// $model->alias

关于php - 是否可以向 Laravel 模型添加非持久属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48515546/

相关文章:

PHP 警告 : Cannot load module "http" because required module "raphf" is not loaded in Unknown on line 0

php - 如何在点php之后和之前分隔数组

PHP如何反转数字的比例

laravel - 使用 formRequest 将错误添加到验证错误

css - Laravel Mix - 当本地主机上的网站不在根文件夹中时,URL 处理工作出错

php - 迷你卡中的自定​​义价格值仅在单个产品站点上是错误的

javascript - 绑定(bind)的输入值未出现在请求中

php - 如何解决 Lumen/Laravel 中的单例问题?

php - guzzle NULL响应lumen php oauth2

Laravel hasOne Relation 2 列