【问题标题】:When does the laravel model attributes array gets populated?laravel 模型属性数组什么时候被填充?
【发布时间】:2017-06-27 21:00:01
【问题描述】:

我们将 laravel 应用程序用于我们的服务器站点 restful 应用程序。我们有一个存储数据的 MySql 数据库。为了访问数据,我们使用 laravel 模型。有时我们可能需要使用访问器和修改器创建自定义属性或操作属性。 事情就是这样。有时我们需要使用访问器从多个属性中计算数据。例如,如果表包含一个名为 due_date 的字段,并且我们想定义一个自定义属性来指示到期日期是否已过,我们使用如下自定义属性:

protected $appends = array('is_late');

public function getIsLateAttribute()
{
    return (Carbon::now() > Carbon::parse($this->attributes['due_date']));
}

我的问题是:是否保证属性数组将在我们获得 due_date 属性时被填充?何时在模型的生命周期中填充属性?如果我们需要从现有数据库字段的访问器访问属性,是否也可以安全使用?

谢谢。

【问题讨论】:

  • 可能会回答你的问题stackoverflow.com/questions/18398489/…
  • 我调查过,我认为这与我的要求无关。还是谢谢你。 :)
  • 这个问题仍然没有答案。下面唯一的建议并没有完全回答这个问题。它只是说$attributes 保证在将对象转换为数组时设置。但是,设置数组时它不会回答。我遇到的问题是,当 $attributes 尚未设置时,框架有时会调用访问器。这发生在数据库中实际作为列存在的属性的访问器上。这些访问器只有一个参数,框架将 DB 值传递给方法,但问题是这个值来自哪里?

标签: php mysql eloquent laravel-5.3 laravel-eloquent


【解决方案1】:

从数据库加载模型时,$attributes 属性会填充模型的数据。因此,在您访问模型对象的那一刻,所有属性都已设置。

$appends 变量中列出的属性,另一方面,在现有模型转换为数组时附加,因此您可以放心地假设 $attributes 已经到时候设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多