我正在使用 Laravel 的API 资源功能为客户端很好地格式化我的响应,但我遇到的问题是下面的代码;
/**
* 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])
);
});
当我在我的项目中使用InertiaJS时,额外的功能(例如assertPropCount
和assertPropValue
)来自 InertiaJS 演示应用程序。
希望有人能够提供帮助,正如我在其他几个地方询问过的那样,似乎没有人知道这是什么原因,并且根据我的调试,似乎并没有太多有效的解释为什么created_at
是空的。
作为一个注释,如果我也转向$item->user
代码$item->user->toArray()
,那么这也无法抱怨user
它不是空的。似乎试图将任何方法链接到任何属性都会导致此空错误,我不确定为什么。