Laravel 8 all() 函数不会将 db 值映射到模型属性
Posted
技术标签:
【中文标题】Laravel 8 all() 函数不会将 db 值映射到模型属性【英文标题】:Laravel 8 all() Function does not map db values to model properties 【发布时间】:2022-01-15 17:18:33 【问题描述】:我对 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() 返回的内容
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: []
有人可以解释一下我在这里缺少什么吗?
感谢您的指点
【问题讨论】:
边信息:Laravel 定义了一个神奇的__get
和 __set
函数,将 $post->id
转换为 $post->getAttribute('id')
进而从属性数组中获取 id
属性(粗略地说)。
非常有用的补充 - 谢谢!
【参考方案1】:
你想得到什么结果?
$posts
的第一个元素是第一篇文章的对象,您不需要再次定义这些属性。你可以使用
$post->id
删除所有定义的属性。
【讨论】:
以上是关于Laravel 8 all() 函数不会将 db 值映射到模型属性的主要内容,如果未能解决你的问题,请参考以下文章
Laravel UNION ALL 不适用于 where 语句
Laravel 8 迁移:DB:unprepared 不适用于共享托管服务器