使用数据库查询定义模型访问器

时间:2018-07-18 13:33:34

标签: php laravel

我正在尝试在模型上设置属性,例如:

public function getLatestLeadAttribute()
{
    return $this->leads()->latest()->first();
}

但是尝试时出现错误:

public function getLatestLeadAttribute()
{
    $lead = $this->leads()->latest()->first();

    return $lead->created_at; // Returning 'Cannot get property of non- object';
}

但是,如果我执行以下操作:

public function getLatestLeadAttribute()
{
    $lead = $this->leads()->latest()->first();

    dd($lead); // Returns App/Lead instance

    return $lead->created_at;
}

即使我dd($lead->created_at)收到了我要寻找的碳物体,它也会按预期返回线索实例。

为什么没有让我返回最新创建的Model的created_at的特定原因?

1 个答案:

答案 0 :(得分:2)

您的代码总是有可能为没有相关线索的模型造成问题。您可以通过仅查询created_at值而不是尝试依赖整个潜在顾客模型来简化代码并解决该问题:

public function getLatestLeadAttribute()
{
    return $this->leads()->latest()->value('created_at');
}

这只会在相关潜在客户中选择最新的created_at;如果不存在相关潜在客户,则返回null。这不仅可以解决访问错误,而且比从数据库中检索所有字段更有效。