0

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

4

3 回答 3

0

这对我有用。

BelongsTo::make('Post')
    ->displayUsing(function ($post) {
  return $post->user->a_property;
}),`
于 2018-10-30T10:05:23.883 回答
0

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

<?php
use App\Post;

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

    return $model;
}

请注意,该newModel()方法是在Nova 填充来自请求的属性之前$post_id调用的,所以我们不会得到. 创建模型后,我们需要使用事件观察器来填充值。

Post首先,为模型创建一个观察者

$ 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而且这个方案基本上可以解决问题,在table和Posttable上存储相同的值并不是一个好主意。

于 2019-03-01T10:37:26.510 回答
0

使用 mutator https://laravel.com/docs/5.7/eloquent-mutators

在你的 Post 模型中这样写函数,调整命名

public function setBValueAttribute($value)
{
   $this->attributes['b_value'] = $this->user->a_property;
}
于 2018-10-29T14:35:12.697 回答