Laravel 使用模型修改器的 $appends 时,无法使用 faker 生成假数据
版本:laravel 5.7
当使用模型修改器的$appends属性,新增元素时,使用faker生成假数据时,报错误:Unknown column 'sex_str'
模型相关代码:
protected $appends = ['sex_str'];
public static $sexAttr = ['未知', '男', '女'];
public function getSexStrAttribute()
{
return array_key_exists($this->sex, self::$sexAttr) ? self::$sexAttr[$this->sex] : '';
}
faker相关代码:
$factory->define(\App\Models\User::class, function (Faker $faker) {
return [
'sex' => random_int(1, 2),
];
});
屏蔽$appends属性就正常了,怎么解决模型修改器影响生成假数据的问题?
补充:
模型修改器的用途是:数据库存的sex是int类型,取出时增加sex_str,转换为字符串。
生成假数据时,faker里加了sex生成的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@iBrand
找到原因了,seeder里写法问题:
我用的
insert
,应该用create
但是用create会生成1000条sql,insert只会生成一条sql,
因为factory里嵌套了一些关联查询,这样生成数据就很慢。
先改成create了,不知道还有没有其它方法?
append 数组中通常都是数据库中不存在的字段,不存在的字段你去 faker 生成模拟数据肯定报错
Unknown column sex_str
-----------------我是分割线-----------------
经过用 Laravel5.7 试验,并不会出现题主说的问题,题主还是仔细检查下自己的代码,哪有有代码去设置了 sex_str, 导致保存数据库时去存储这个字段,所以提示 Unknown column 'sex_str'。