【问题标题】:How to access a column in laravel query result如何访问 laravel 查询结果中的列
【发布时间】:2016-12-29 13:31:10
【问题描述】:

我的控制器出现错误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),但不适用于这个,为什么?

【问题讨论】:

  • 如果该代码与findOrFail 一起使用,则有问题。此外,您可以在模型中使用访问器,而不是在控制器中设置 Post::created_atLook here

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


【解决方案1】:

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')

【讨论】:

  • first() 会返回所有行吗?
  • 不,它只会返回一个对象(第一个)。如果您有多个项目,则使用 foreach 是唯一的选择。
  • 它抛出了一个错误A two digit month could not be found Data missing。代码已更新!
  • @JaskaranSinghPuri 它与原始问题无关,您应该创建另一个问题,发布错误等。我认为您不能这样做 $post->created_at= 并且您不需要解析 created_at因为它已经是 Carbon 的一个实例。
【解决方案2】:

由于$postCollection 的实例,您必须将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);
}

【讨论】:

  • 或者更好的是,如果只需要 1 个结果,则在查询上调用 ->first() 方法而不是集合本身。
  • 抛出错误找不到两位数的月份数据丢失。代码已更新!
【解决方案3】:

当您调用get() 时,您可以传递一个字段数组来选择:

$posts = Post::latest()->get(['created_at']);

然后转储看看,dd($post)里面是什么

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2018-03-04
    • 2018-08-28
    • 2018-05-10
    相关资源
    最近更新 更多