为Eloquent集合创建一个新的空属性

时间:2019-04-22 20:35:03

标签: php laravel eloquent

我有一个循环浏览的集合,并尝试添加一个具有空值的新属性suffix

    $results = Models\EloTable
        ::hydrate((array) $query)
        ->load(
            'extraction',
            'reference'
        );

    foreach ($results as $result) {
        foreach ($result->data->authors as $author) {
            $author->suffix = '';
        }
    }

当前,每个$author都有两个属性

{
    lastName: "Lastname",
    firstName: "Firstname"
}

如果我在第一次迭代后dd($author);,我将得到

{
    lastName: "Lastname",
    firstName: "Firstname",
    suffix: ""
}

但是,如果我在两个dd($results);循环之后foreach,它将不会持续添加空的suffix属性。

如何更改集合以保留suffix属性?

2 个答案:

答案 0 :(得分:0)

您可以将属性添加到这样的模型中:

型号:

protected $appends = ['suffix'];

public function getSuffixAttribute()
{
    return null;  
}

文档:

https://laravel.com/docs/5.8/eloquent-mutators

https://laravel.com/docs/5.8/eloquent-serialization#appending-values-to-json

答案 1 :(得分:0)

如果您没有在原始data中加载data.authors$results,然后在下一行调用$results->data->authors或类似的方法,将重新查询数据库,拉尚未修改的authors的新副本。

只需将$results更改为:

$results = Models\EloTable
        ::hydrate((array) $query)
        ->load(
            'extraction',
            'reference',
            'data',
            'data.authors',
        );