Преобразование коллекций Laravel с помощью вложенных ресурсов

Это для Laravel 5.2. Я знаю о Fractal, но я пытаюсь научиться делать это без стороннего пакета специально для глубокого понимания того, как работает Laravel. С учетом сказанного, я застрял на этом, по крайней мере, последние два дня, и теперь я поднимаю белый флаг.

Я пытаюсь вложить ресурсы и запустить каждый родительский и дочерний ресурс через определенные преобразователи. Отношения настроены правильно, но я уверен, что проблема заключается в том, как коллекции анализируются / интерпретируются / что-то. Вот пример чего-то, что поражает воображение:

Получить некоторые данные из базы данных и включить две взаимосвязи (созданный_объект и обновленный_бай — это отношения внешнего ключа к другой таблице):

>>> $items = $items::with('created_by')->with('updated_by')->where('user_id',30)->first()
=> App\Models\User\UserEmail {#1065
id: 60,
email: "[email protected]",
type_id: 25,
created_by: App\Models\User\User {#1055
id: 30,
name_first: "Karine",
name_first_preferred: null,
name_last: "Isabelle",
},
updated_by: App\Models\User\User {#1054
id: 30,
name_first: "Karine",
name_first_preferred: null,
name_last: "Isabelle",
},
created_at: "2015-09-03 04:17:57",
updated_at: "2017-01-13 08:06:18",
}

Все идет нормально. Пользователь, который создал и обновил электронное письмо, был выбран, как указано в модели UserEmail, следующим образом:

public function created_by()
{
return $this->hasOne(User::class, 'id', 'created_by')->withTrashed()->select(User::getMinimalUserFields());
}

public function updated_by()
{
return $this->hasOne(User::class, 'id', 'updated_by')->withTrashed()->select(User::getMinimalUserFields());
}

Теперь часть, которая меня полностью запутала. Я могу получить определенную часть коллекции $ items ожидаемым образом, но не другие. Проверка id возвращает 60 — хорошо, хорошо. проверка created_by возвращает целое число вместо объекта. Какие?! проверка created_at дает мне экземпляр Carbon \ carbon, что означает, что он автоматически превратился в строку в предыдущем выводе. Какие?!

>>> $items['id']
=> 60
>>> $items['created_by']
=> 30
>>> $items->created_by
=> 30
>>> $items->created_at
=> Carbon\Carbon {#811
+"date": "2015-09-03 04:17:57.000000",
+"timezone_type": 3,
+"timezone": "UTC",
}

Я ожидал увидеть объект, когда попробовал хотя бы один из методов, показанных выше, чтобы получить данные из created_by, Моя настоящая проблема в трансформаторе, но я думаю, что вышеизложенное показывает, где я застрял. Я прочитал каждую информацию, которую я могу найти о коллекциях и преобразователях, но я либо не прочитал правильную информацию, либо не понял ее.

Это то, что я на самом деле пытаюсь сделать, но ничего, что я пробовал, не сработало. В результате выводится ошибка из-за невозможности вызова all() на целое число, потому что id пользователя передается в преобразователь подресурса вместо объекта.

public function transform($email)
{
$data = [
'id'         => (integer)$email['id'],
'email'      => $email['email'],
'type_id'    => (integer)$email['type_id'],
'created_at' => $email['created_at'],
'updated_at' => $email['updated_at'],
];

if (isset($email->created_by)) {
$userMinimalTransformer = new UserMinimalTransformer();
$data['created_by'] = $userMinimalTransformer->transformCollection($email->created_by->all());
}

return $data;
}

Любая помощь будет принята с благодарностью.

Редактировать:

В ответ на комментарий, вот еще один пример невозможности получить объект пользователя от updated_by когда метод -> all () вызывается для объекта paginator:

>>> $n = App\Models\User\UserNote::with('updated_by')->paginate(2)
=> Illuminate\Pagination\LengthAwarePaginator {#879}
>>> $n->all()
=> [
App\Models\User\UserNote {#869
id: 1,
note: "Dolorum amet iste laborum eius est dolor dolores minus voluptatem quisquam.",
type_id: 100,
created_by: 1,
updated_by: App\Models\User\User {#856
id: 1,
name_first: "System",
name_first_preferred: "System",
name_last: "System",
},
created_at: "2015-06-01 22:54:14",
updated_at: "2017-01-11 15:10:08",
},
App\Models\User\UserNote {#964
id: 2,
note: "Quo sed fugit facilis perferendis dolores molestias ipsam sit veniam sed fuga aspernatu
r natus.",
type_id: 125,
created_by: 1,
updated_by: App\Models\User\User {#856},
created_at: "2015-09-19 16:10:19",
updated_at: "2016-08-28 16:03:58",
},
]
>>> $n[0]
=> App\Models\User\UserNote {#869
id: 1,
note: "Dolorum amet iste laborum eius est dolor dolores minus voluptatem quisquam.",
type_id: 100,
created_by: 1,
updated_by: App\Models\User\User {#856
id: 1,
name_first: "System",
name_first_preferred: "System",
name_last: "System",
},
created_at: "2015-06-01 22:54:14",
updated_at: "2017-01-11 15:10:08",
}
>>> $n[0]['id']
=> 1
>>> $n[0]['updated_by']
=> 1
>>> $n[0]->updated_by
=> 1

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]