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
删除您定义的所有属性。
我是 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
删除您定义的所有属性。