Создание нового пустого свойства в коллекции Eloquent - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть коллекция, которую я перебираю и пытаюсь добавить новое свойство 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"
}

Если I dd($author); после первой итерации, я получу

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

Но если I dd($results); после двух циклов foreach, оно не будет сохраняться при добавлении пустого suffix properties.

Как изменить коллекцию, чтобы сохранить свойство suffix?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Если вы не загрузите data и data.authors в исходном $results, то при вызове $results->data->authors или чего-то подобного позже в строке будет повторный запрос к базе данных, получая свежую копию authors, котораяне был изменен

Просто измените $results на:

$results = Models\EloTable
        ::hydrate((array) $query)
        ->load(
            'extraction',
            'reference',
            'data',
            'data.authors',
        );
0 голосов
/ 22 апреля 2019

Вы можете добавить атрибут к модели следующим образом:

Модель:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...