Заполнение $ атрибутов значениями из предыдущей модели? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть проект Laravel (фактически проект Laravel Nova), который включает в себя ввод большого количества данных. Чтобы сэкономить время, я бы хотел предварительно заполнить некоторые поля в моей форме, основываясь на последней записи зарегистрированного пользователя.

Я могу предварительно заполнить поля с помощью переменной $ attribute в моей модели, называется Product, вот так:

protected $attributes = [
  'category' => 'ABC'
];

И я могу сделать это для большего количества динамических c данных в конструкторе примерно так:

function __construct() {
  $this->attributes['category'] = Str::random();
  parent::__construct();
}

Но я не совсем конечно, я бы go об этом узнал, когда я хочу получить то, что пользователь ввел в прошлый раз. Например, я хотел бы сделать это:

function __construct() {
  $user = auth()->user()->id;
  $last = Product::where('created_by', $user)->latest()->first();
  $this->attributes['category'] = $last['category'] ?? null;
}

Однако это заканчивается бесконечным l oop. То же самое, если я позвоню $this->where('created_by' ...

Есть ли способ установить $attributes нового Product на основе последнего Product, созданного пользователем?

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Новые поля имеют метод resolveUsing, поэтому в вашем случае, если вы хотите заполнить текстовое поле:

Text::make('Category')->resolveUsing(function () {
    return optional(auth()->user()->products()->latest()->first())->category;
})
0 голосов
/ 23 марта 2020

Я нашел решение в пакете Nova Defaultable .

Как только вы добавите необходимые черты, вы можете просто добавить ->defaultLast() в поле ресурса, и оно по умолчанию будет последнее установленное значение. Это также работает для отношений, которые идеально подходят для моего случая использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...