我的控制器Undefined property: Illuminate\Database\Eloquent\Collection::$created_at
如何从laravel查询结果中访问列created_at
?
控制器代码:
public function getDashboard() {
$posts=Post::latest('created_at')->get();
dd($posts->created_at);
// $posts->created_at=Carbon::parse($posts->created_at)->diffForHumans(Carbon::now());
return view('dashboard',compact('posts'));
}
它适用于findOrFail(some_id)
,但不适用于此,为什么?
答案 0 :(得分:3)
get()
返回集合,因此您需要迭代它:
foreach ($posts as $post) {
echo $post->created_at;
}
或者您可以使用first()
来获取对象而不是集合。在这种情况下,这将起作用:
$post = Post::latest()->first();
$post->created_at;
此外,您无需将created_at
传递给latest()
,因为此列定义为默认列:
public function latest($column = 'created_at')
答案 1 :(得分:2)
由于$post
是实例Collection
,您必须使用foreach
作为:
foreach ($posts as $post) {
dd($post->created_at);
}
或者您可以使用first
获取第一个对象,或使用last
获取最后一个对象
dd($posts->first()->created_at);
dd($posts->last()->created_at);
<强>更新强>
尝试为:
foreach ($posts as $post) {
$post->diff_for_humans = $post->created_at->diffForHumans();
}
然后你可以访问它:
foreach ($posts as $post) {
dd($post->diff_for_humans);
}
答案 2 :(得分:0)
当你致电get()
时,你可以传递一系列字段来选择:
$posts = Post::latest()->get(['created_at']);
然后转储以查看dd($post)