Как использовать свойство пользователя в качестве значения по умолчанию при создании страницы публикации? - PullRequest
0 голосов
/ 28 октября 2018

Допустим, у пользователя есть свойство с именем 'a_property', а сообщение принадлежит пользователю.При добавлении сообщения на странице создания (которое пользователь нового сообщения автоматически устанавливает для выбранного пользователя), как я могу использовать a_property пользователя в качестве значения по умолчанию для b_value сообщения?

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Это работает для меня.

BelongsTo::make('Post')
    ->displayUsing(function ($post) {
  return $post->user->a_property;
}),`
0 голосов
/ 01 марта 2019

Вы можете добавить функцию newModel в свой класс ресурсов nova:

<?php
use App\Post;

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

    return $model;
}

Обратите внимание, что метод newModel() вызывается до того, как Nova заполнит атрибуты, поступающие иззапрос, чтобы мы не получили $post_id.Нам нужно использовать наблюдатель событий, чтобы заполнить значение после создания модели.

Сначала создайте Observer для 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 и Post.

0 голосов
/ 29 октября 2018

Использовать мутатор https://laravel.com/docs/5.7/eloquent-mutators

В модели вашего поста напишите функцию, подобную этой, настройте имя

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