假设User有一个名为'a_property'的属性,Post属于User。在创建页面中添加帖子(新帖子的用户自动设置为所选用户)时,如何将用户的a_property用作Post的b_value的默认值?
使用mutator https://laravel.com/docs/5.7/eloquent-mutators
在你的Post模型中写这样的函数,调整命名
public function setBValueAttribute($value)
{
$this->attributes['b_value'] = $this->user->a_property;
}
这适合我。
BelongsTo::make('Post')
->displayUsing(function ($post) {
return $post->user->a_property;
}),`
您可以在nova资源类中添加newModel
函数:
<?php
use App\Post;
public static function newModel(): Post
{
$model = parent::newModel();
$model->a_property = '';
return $model;
}
请注意,在Nova填充来自请求的属性之前调用newModel()
方法,因此我们不会得到$post_id
。在创建模型之后,我们需要使用事件观察器来填充值。
First, create an Observer for Post
model
$ php artisan make:observer PostObserver --model=Post
然后我们可以将代码放在created
方法中
<?php /* file: app/Observers/PostObserver.php */
use App\Post;
public function create(Post $post)
{
// Assume the relation is `user`:
$post->a_property = $post->user->a_property;
$post->save();
}
此解决方案基本上可以解决问题,在User
和Post
表上存储相同的值不是一个好主意。