Laravel 8 all() 函数不将数据库值映射到模型属性

Laravel 8 all() Function does not map db values to model properties

我是 laravel 的新手,所以我认为这是一个新手问题。基本上我尝试通过静态 all() 函数检索我的数据库数据。但是不知何故,我生成的模型实例只填充了属性数组中的数据,但所有模型属性都是空的。

我有一条简单的路线

Route::get('/posts', function () {
    $posts = App\Models\Post::all();
    ddd($posts[0]);
    return view('posts', [
        'posts' => $posts,
    ]);
});

和一个简单的模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    public $id;
    public $title;
    public $excerpt;
    public $body;
    public $published_at;
    public $category_id;

    protected $fillable = [
        'title',
        'excerpt',
        'body',
        'published_at',
        'category_id',
    ];

    protected $guarded = ['id'];

    public function category() {
        return $this->belongsTo(Category::class);
    }
}

这就是 ddd() returns

App\Models\Post {#1225 ▼
  +id: null
  +title: null
  +excerpt: null
  +body: null
  +published_at: null
  +category_id: null
  #fillable: array:5 [▶]
  #guarded: array:1 [▶]
  #connection: "mysql"
  #table: "posts"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  +preventsLazyLoading: false
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #escapeWhenCastingToString: false
  #attributes: array:8 [▼
    "id" => 1
    "title" => "Dedrick Ebert DDS"
    "excerpt" => "Possimus sit animi enim error. Omnis maxime ducimus nesciunt omnis quibusdam."
    "body" => "Neque est aliquid est placeat. Eaque nihil nobis nobis nostrum consequuntur. Omnis quis aut ipsum quo. Facilis velit ducimus quisquam consequatur vitae quidem.  ▶"
    "published_at" => "2003-10-06"
    "category_id" => 7
    "created_at" => "2021-12-07 20:30:15"
    "updated_at" => "2021-12-07 20:30:15"
  ]
  #original: array:8 [▶]
  #changes: []
  #casts: []
  #classCastCache: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
}

有人可以解释一下我在这里缺少什么吗?

感谢指点

你想得到什么结果?

$posts 的第一个元素是第一个 post 的对象,您不需要再次定义这些属性。你可以只使用

$post->id

删除您定义的所有属性。