Я использую функцию ресурсов API Laravel для удобного форматирования моих ответов для клиента. , но проблема, с которой я столкнулся, связана с приведенным ниже кодом;
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'data' => $this->collection->transform(function ($item)
{
return [
'id' => $item->id,
'title' => Str::limit($item->title, 32),
'body' => Str::limit($item->body, 32),
'created_at' => $item->created_at->format('d M Y, H:i a'),
'user' => $item->user
];
}),
'links' => [
'current_page' => $this->currentPage(),
'total' => $this->total(),
'per_page' => $this->perPage(),
],
];
}
При использовании этого кода я получаю сообщение об ошибке; "Call to a member function format() on null"
по атрибуту created_at
.
Но я уже использовал dd($this->collection)
, чтобы подтвердить, что ни один из атрибутов на самом деле не является null
, и я не совсем уверен, что могло быть причиной этого. Моя миграция содержит $table->timestamps();
, и внутри моей фабрики я вообще не переопределяю временные метки, поэтому я не совсем уверен, в чем проблема.
Вот тест, который я провожу ниже, чтобы получить эту ошибку;
factory(News::class, 10)->create();
$user = factory(User::class)->create();
$this->actingAs($user)
->get('/news')
->assertOk()
->assertPropCount('news.data', 10)
->assertPropValue('news.data', function ($news)
{
$this->assertEquals(
[
'id', 'title', 'body', 'created_at',
'user',
],
array_keys($news[0])
);
});
Дополнительные функции, такие как assertPropCount
и assertPropValue
, получены из демонстрационного приложения InertiaJS, поскольку я использую InertiaJS в моем проекте.
Надеюсь, кто-то сможет помочь, так как я спросил в нескольких других местах, и никто, похоже, не знает, в чем причина этого, и, основываясь на моей отладке, на самом деле, похоже, нет большого допустимого объяснения относительно того, ПОЧЕМУ created_at
равно нулю.
В качестве примечания, если я также превращаю $item->user
в $item->user->toArray()
в коде, это также не будет жаловаться на то, что user
имеет значение null, когда это не так. Кажется, что попытка привязать любой метод к любому атрибуту вызывает эту нулевую ошибку, и я не уверен, почему.
'user_id' => factory(User::class),
для создания своих пользователей в NewsFactory. - person Borassign   schedule 01.01.2020