如何使用数据库中的值作为 laravel livewire 中的属性

How to use values from database as properties in laravel livewire

我有一个“custom_fields”table,我在其中存储用户创建的字段。我需要使用 table 中的“field_slug”值来形成另一种形式的属性。默认情况下 public 属性不存在,因此当尝试在输入字段中输入数据时会抛出错误(“属性 [$field_name] not found on component”) .

我知道 livewire 使用 public 属性,但由于返回的数据是动态的,我无法(或不知道如何)创建那些 public 属性以在表单中使用。所以,数组中的“field_name”是我想要充当 public 属性(或者这可能是不正确的方法,不确定)所以我可以存储值由用户在输入框内输入。

如能提供有关此问题的任何有用帮助,我们将不胜感激。


CustomField 中的数据


组件


HTML(blade)

我的解决方案是在 livewire 的 mount() 方法中调用我的自定义字段查询并将值分配给自定义字段 属性。我改变了 $this->customFields 属性 中分配的值并将其分配给 $this->formSlugs 属性

public function mount()
{
    $this->customFields = CustomField::all();

    $data = [];
    $this->formSlugs = collect($this->customFields)->map(function($value) use ($data) {
        $data[$value->field_slug] = '';
        return $data;
    })->toArray();
}


public function render()
{
    return view('livewire.inventory.items.create', ['customFields' => $this->customFields])
        ->extends('layouts.master')
        ->section('content');
}

在HTML

@foreach($customFields as $key => $customField)
    <input type="text" wire:model="formSlugs.{{$key}}.{{$customField->field_slug}}" class="form-control focus:placeholder-transparent" placeholder="{{ $customField->placeholder_text }}">
@endforeach