戏里戏外

Laravel 模型中获取 fillable 数组

2024-11-04#Laravel#Eloquent

如果出于任何目的,比如说 Feature 测试时,需要从 Laravel 模型获取 $fillable 字段,可以使用模型的 getFillable() 方法将返回所有 $fillable 列的数组。

(new User())->getFillable();

# PHP >= 8.4 不需要用括号来命名模型的实例化
new User()->getFillable();

# 使用 `app()` 获取模型
app(Model::class)->getFillable();

所以,有很多方法可以获取在模型中定义的 fillable 可填充列,上面的这些例子都做同样的事情。

另外如果要获取模型的 $casts 属性可以通过 getCasts() 方法获取。

测试用例

使用 pest 断言模型的 $fillable$casts 属性进行测试。

<?php
use App\Models\Post;

it('has some attributes for post model', function () {
	expect(app(Post::class))
		->getFillable()
		->toMatchArray([
			'name', 'slug', 'category_id', 'cover', 'description', 'body', 'published_at',
		])
		->getCasts()
		->toMatchArray([
			'id' => 'int',
			'published_at' => 'datetime',
			'deleted_at' => 'datetime',
	]);
});