Коллекция значений перезаписи, вложенная в laravel - PullRequest
0 голосов
/ 27 января 2020

У меня есть такая вложенная коллекция:

"package_detail": [
                {
                    "id": 229,
                    "package_id": 66,
                    "data_scoin_id": 210,
                    "unit_scoin_id": 3,
                    "created_at": "2020-01-16 21:51:18",
                    "updated_at": null,
                    "created_by": 1,
                    "updated_by": null,
                    "unit_scoin": {
                        "id": 3,
                        "unit_scoin": 1000,
                        "code_scoin": "SCOINAKHDLL2019                                                                                                                                                                                                                                                ",
                        "description": "Seribu Scoin",
                        "rate_exchange": "Rp. 1.000",
                        "created_at": "2019-09-07 10:52:47",
                        "updated_at": null,
                        "created_by": null,
                        "updated_by": null
                    }
                },

Я хочу переписать unit_scoin (родительский) с unit_scoin (дочерний), который я пытался отобразить, и каждый из них package_detail индекс вот так:

$packages = ScoinPackage::with('package_detail.unit_scoin')->get()
        ->map(function($d){
            $d->package_detail->each(function($dd) use (&$arr){
                $dd->unit_scoin = $dd->unit_scoin->unit_scoin;
            });

            return $d;
        });

Но это не сработало, кто-нибудь может мне помочь?

Ответы [ 3 ]

0 голосов
/ 27 января 2020

Вам необходимо использовать метод transform(), поскольку each() просто перебирает коллекцию без изменений, а map() создает и возвращает новый объект коллекции (и не изменяет исходный объект).

Нечто подобное должно сработать:

$packages = ScoinPackage::with('package_detail.unit_scoin')->get()
    ->map(function($d){
        $d->package_detail->transform(function ($dd) {
            return $dd->unit_scoin = $dd->unit_scoin->unit_scoin;
        });

        return $d;
    });
0 голосов
/ 27 января 2020
Конфликт

решен

, поскольку имя объекта совпадает. Сначала сохраните переменную и удалите ее

$packages = ScoinPackage::with('package_detail.unit_scoin')->get()->map(function($d){
            $d->package_detail->map(function($dd){
                $unit = $dd->unit_scoin;
                unset($dd->unit_scoin); 
                $dd->unit_scoin = $unit->unit_scoin;
                return $dd;
            });
            return $d;
        });
0 голосов
/ 27 января 2020

Вам также необходимо использовать функцию map() для l oop над package_details. Каждая функция не будет возвращать или изменять что-либо, если вы не передадите значение по ссылке.

$packages = ScoinPackage::with('package_detail.unit_scoin')->get()
    ->map(function($d){
        $d->package_detail->map(function($dd) use (&$arr){
            $dd->unit_scoin = $dd->unit_scoin->unit_scoin;

            return $dd;
        });

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