hoo*_*ola 0 relationship laravel laravel-nova
我想将资源字段的默认值设置为经过身份验证的用户的id. 我有一个名为 的模型,它与和Note具有一对多关系。GameUser
User hasMany Note
Game hasMany Note
Note belongsTo User
Note belongsTo Game
Run Code Online (Sandbox Code Playgroud)
在 Laravel Nova 中,我的注释字段如下所示
ID::make()->sortable(),
Text::make('Note', 'note')->onlyOnIndex(),
Textarea::make('Note', 'note')->alwaysShow(),
BelongsTo::make('Game', 'game')->hideWhenCreating()->hideWhenUpdating(),
BelongsTo::make('Created By', 'user', 'App\Nova\User')->hideWhenCreating()->hideWhenUpdating(),
DateTime::make('Created At', 'created_at')->hideWhenCreating(),
DateTime::make('Updated At', 'updated_at')->hideWhenCreating(),
Run Code Online (Sandbox Code Playgroud)
因为我引用Nova 资源Note上的Game,所以当我创建 时Note,该game_id列已正确填充。但是,我希望该user_id列是经过身份验证的用户的值。它似乎不是这样工作的,我该如何实现呢?
小智 5
如果我从该行理解正确,BelongsTo::make('Created By', 'user', 'App\Nova\User')->hideWhenCreating()->hideWhenUpdating()您试图为该列设置默认值而不在表单上显示该字段?
我认为以这种方式这是不可能的。一旦您使用这些hide函数,这些字段就不会呈现,并且永远不会随请求一起传递。我尝试了这个,但该user_id字段从未随请求一起发送。
我认为有两种方法可以做到这一点:
在表单中显示该字段并使用元数据设置默认值(为了更好的衡量,也许可以将该字段设置为只读)。
BelongsTo::make('Created By', 'user', 'App\Nova\User')->withMeta([
"belongsToId" => auth()->user()->id,
])
Run Code Online (Sandbox Code Playgroud)
或者使用 Eloquentcreating事件。以下内容将出现在您的 Note 模型中。
public static function boot()
{
parent::boot();
static::creating(function($note)
{
$note->user_id = auth()->user()->id;
});
}
Run Code Online (Sandbox Code Playgroud)
当然,上面的方法有点简单。您最好使用适当的事件侦听器。
旁注:从架构的角度来看,我会选择选项 2。在不让最终用户参与的情况下设置默认值听起来像是 Eloquent 模型的工作,而不是 Nova 表单的工作。
| 归档时间: |
|
| 查看次数: |
6695 次 |
| 最近记录: |