Mam projekt Laravel (właściwie projekt Laravel Nova), który wymaga wprowadzenia dużej ilości danych. Aby zaoszczędzić trochę czasu, chciałbym wstępnie wypełnić niektóre pola w moim formularzu na podstawie ostatniego wpisu zalogowanego użytkownika.
Mogę wstępnie wypełnić pola za pomocą zmiennej $ attributes w moim modelu o nazwie Product
, na przykład:
protected $attributes = [
'category' => 'ABC'
];
Mogę to zrobić dla bardziej dynamicznych danych w konstruktorze, na przykład:
function __construct() {
$this->attributes['category'] = Str::random();
parent::__construct();
}
Ale nie jestem do końca pewien, jak bym to zrobił, gdy chcę odzyskać to, co użytkownik wprowadził ostatnio. Na przykład chciałbym to zrobić:
function __construct() {
$user = auth()->user()->id;
$last = Product::where('created_by', $user)->latest()->first();
$this->attributes['category'] = $last['category'] ?? null;
}
Jednak kończy się to nieskończoną pętlą. To samo, jeśli zadzwonię $this->where('created_by' ...
Czy istnieje sposób, aby ustawić $attributes
nowego Product
na podstawie ostatniego Product
utworzonego przez użytkownika?
2 odpowiedzi
Znalazłem rozwiązanie w pakiecie Nova Defaultable.
Po dodaniu niezbędnych cech możesz po prostu dodać ->defaultLast()
do pola zasobu, a domyślnie zostanie ustawiona ostatnia ustawiona wartość. Działa to również w przypadku relacji, które są idealne dla mojego przypadku użycia.
Pola Nova mają metodę resolveUsing
, więc w twoim przypadku, jeśli chcesz wypełnić pole tekstowe:
Text::make('Category')->resolveUsing(function () {
return optional(auth()->user()->products()->latest()->first())->category;
})
Podobne pytania
Nowe pytania
laravel
Laravel to darmowy framework sieciowy PHP o otwartym kodzie źródłowym, stworzony przez Taylora Otwella i przeznaczony do tworzenia aplikacji internetowych według wzorca architektonicznego model – widok – kontroler (MVC) i oparty na Symfony. Kod źródłowy Laravel jest hostowany na GitHub i licencjonowany na warunkach licencji MIT.