Laravel 是否使用以前模型中的值填充$attributes?

Laravel 是否使用以前模型中的值填充$attributes?,laravel,laravel-nova,Laravel,Laravel Nova,我有一个Laravel项目(实际上是一个Laravel Nova项目),需要输入大量数据。为了节省一些时间,我想根据登录用户的最后一个条目预先填写表单中的一些字段 我可以通过模型上名为Product的$attributes变量预填充字段,如下所示: 受保护的$attributes=[ “类别”=>“ABC” ]; 对于构造函数中的更多动态数据,我可以这样做: 函数uuu构造(){ $this->attributes['category']=Str::random(); 父项::_构造(); }

我有一个Laravel项目(实际上是一个Laravel Nova项目),需要输入大量数据。为了节省一些时间,我想根据登录用户的最后一个条目预先填写表单中的一些字段

我可以通过模型上名为
Product
的$attributes变量预填充字段,如下所示:

受保护的$attributes=[
“类别”=>“ABC”
];
对于构造函数中的更多动态数据,我可以这样做:

函数uuu构造(){
$this->attributes['category']=Str::random();
父项::_构造();
}
但是当我想检索用户上次输入的内容时,我不太确定该怎么做。例如,我想这样做:

函数uuu构造(){
$user=auth()->user()->id;
$last=Product::where('created_by',$user)->latest()->first();
$this->attributes['category']=$last['category']??空;
}
然而,这最终是一个无限循环。如果我调用
$this->where('created_by')…


是否有一种方法可以根据用户创建的上一个
产品
设置新
产品
$attributes

Text::make('Category')->resolveUsing(函数(){
返回可选(auth()->user()->products()->latest()->first())->category;
})

我在软件包中找到了解决方案


添加必要的特征后,只需添加
->defaultLast()
添加到资源字段,它将默认为最后一个设置值。这也适用于适合我的用例的关系。

您根本不应该在模型的构造函数中执行此操作。如果需要填充表单,您可以在控制器中提取数据并将其传递给视图以供显示。在提交t表单。当您这样做时,如果产品和用户在数据库中相关,则它们应该在Laravel中具有关系。您不应该执行
Product::where('created_by',auth()->user()->id)->latest()->first();
手动搜索特定用户id,而应该执行
auth()->user()->products()->orderBy('created_at','desc')->first()
@miken32我想是这样的,因为在我开始这个Nova项目之前我从来没有这样做过。我会重新阅读Nova的文档,但我不确定在Nova渲染表单之前我是否可以访问控制器。我没有Nova方面的经验,但是如果你没有能力更改控制器的行为,我会非常惊讶这是一个开始,但是它不适用于BelongsTo字段(我假设其他关系字段)=1
在我的模型中,它默认为ID为1的产品。但是如果我在
resolveUsing
函数中返回
1
,它默认为未选择任何内容。另外,resolveUsing用于在从数据库检索数据之后,但在数据进入前端之前修改数据。它不是用于设置默认值的,因为如果我离开<代码>类别
故意为空,它只会预先填充以前设置的内容。