如何访问laravel查询结果中的列

时间:2016-12-29 13:31:10

标签: php laravel laravel-5 eloquent laravel-5.2

我的控制器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),但不适用于此,为什么?

3 个答案:

答案 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)

内部的内容