在创建帖子页面时如何使用用户属性作为默认值?

时间:2018-10-28 15:18:41

标签: laravel-nova

假设User具有一个名为'a_property'的属性,而Post属于User。在创建页面中添加帖子时(新帖子的用户 自动设置为选定的用户),如何使用用户的a_property作为Post的b_value的默认值?

3 个答案:

答案 0 :(得分:0)

使用增幅器 https://laravel.com/docs/5.7/eloquent-mutators

在这样的Post Post模型编写功能中,调整命名

public function setBValueAttribute($value)
{
   $this->attributes['b_value'] = $this->user->a_property;
}

答案 1 :(得分:0)

这对我有用。

BelongsTo::make('Post')
    ->displayUsing(function ($post) {
  return $post->user->a_property;
}),`

答案 2 :(得分:0)

您可以在您的nova资源类中添加一个newModel函数:

<?php
use App\Post;

public static function newModel(): Post
{
    $model = parent::newModel();
    $model->a_property = '';

    return $model;
}

请注意,newModel()方法在之前被称为,Nova填充了来自请求的属性,因此我们不会获得$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();
}

该解决方案也可以从根本上解决问题,在UserPost表上存储相同的值也不是一个好主意。