【问题标题】:laravel livewire mount dynamic fieldslaravel livewire 挂载动态字段
【发布时间】:2021-04-14 19:51:52
【问题描述】:

我想要动态输入字段,其中包含已在数据库中输入的所有值。

以下代码有效! 这里将输入的extras.4字段的值显示在网站上

public function mount() {

        $this->advettisment_extras = DB::table('advertisment_extras')
            ->where('advertisment_number', '=', $this->advertisment['advertisment_number'])
            ->where('user_id', '=', Auth::user()->id)->get()->toArray();

        foreach ($this->advettisment_extras as $advettisment_extra) {
            $this->extras = [
                '4' => '12346548'
            ];
        }
    }

但是当我尝试从db动态搜索并填写字段时,值并没有显示出来。

        foreach ($this->advettisment_extras as $advettisment_extra) {
            $this->extras = [
                $advettisment_extra->extra_id => $advettisment_extra->extra_value
            ];
        }

谁能帮忙?

【问题讨论】:

  • 请也分享您的渲染刀片。
  • 我不明白 foreach 循环中的内容。您在每次迭代中覆盖 $this->extras。这是您使用的真实代码吗?正如 Digvijay 所说 - 也显示刀片代码。我无法理解您如何从 $extras 那里获得 4 个输入。我只能看到 $extras 只有一项 ['4' => '12345664']

标签: laravel laravel-livewire


【解决方案1】:
<div class="row" wire:init="loadExtras">
    @if(isset($categorie_extras))
        @foreach($categorie_extras as $categorie_extra)
            <div class="col-4 form-group">{!! getExtraField($categorie_extra->extra_id, $advertisment->advertisment_number) !!}</div>
        @endforeach
    @endif
</div>

还有我在 helper.php 中的 getExtraField 函数

//Helper für Anzeige der Extra Felder
function getExtraField($extra_id, $advertisment_number) {
    $field = '';
    $option = '';
    // Extra aus DB holen
    $extra = \Illuminate\Support\Facades\DB::table('extras')->where('id', '=', $extra_id)->first();
    $advertisment_extras = \Illuminate\Support\Facades\DB::table('advertisment_extras')
        ->where('advertisment_number', '=', $advertisment_number)
        ->where('user_id', '=', \Illuminate\Support\Facades\Auth::user()->id)->get();

    switch ($extra->extra_form_item) {

        case 'input':

            foreach($advertisment_extras as $advertisment_extra) {
                if ($advertisment_extra->extra_id == $extra->id ) {
                    $field = '<label for="' . $extra->id . '">' . $extra->extra_field_label . '</label><input type="' . $extra->extra_input_field_type . '" wire:model.lazy="extras.' . $extra->id . '" name="' . $extra->id . '" class="form-control" id="' . $extra->id . '">';
                    break;
                } else {
                    $field = '<label for="' . $extra->id . '">' . $extra->extra_field_label . '</label><input type="' . $extra->extra_input_field_type . '" wire:model.lazy="extras.' . $extra->id . '" name="' . $extra->id . '" class="form-control" id="' . $extra->id . '">';
                }
            }
            break;

        case 'select':
            $values = explode(',', $extra->extra_enum_select_values);
            // Option des Select Feldes suchen
            $field_1 = '<label for="' . $extra->id . '">' . $extra->extra_field_label  . '</label><select name="' . $extra->id . '" wire:model="extras.'. $extra->id . '" class="form-control"  id="' . $extra->id .  '">';
            foreach ($values as $value) {
                $option = $option .'<option value="'. $value . '">' . $value . '</option>';
            }
            $field_3 = '</select>';

            $field = $field_1 . $option . $field_3;
            break;

        case 'checkbox' :
            $field = '<label for="' . $extra->id . '">' . $extra->extra_field_label  . '</label><br><input type="checkbox" name="' . $extra->id . '" wire:model="extras.'. $extra->id . '" class="" value="1"  id="' . $extra->id .  '">';
            break;
    }

     return $field;
}

还有我的完整组件:

//Helper für Anzeige der Extra Felder
function getExtraField($extra_id, $advertisment_number) {
    $field = '';
    $option = '';
    // Extra aus DB holen
    $extra = \Illuminate\Support\Facades\DB::table('extras')->where('id', '=', $extra_id)->first();
    $advertisment_extras = \Illuminate\Support\Facades\DB::table('advertisment_extras')
        ->where('advertisment_number', '=', $advertisment_number)
        ->where('user_id', '=', \Illuminate\Support\Facades\Auth::user()->id)->get();

    switch ($extra->extra_form_item) {

        case 'input':

            foreach($advertisment_extras as $advertisment_extra) {
                if ($advertisment_extra->extra_id == $extra->id ) {
                    $field = '<label for="' . $extra->id . '">' . $extra->extra_field_label . '</label><input type="' . $extra->extra_input_field_type . '" wire:model.lazy="extras.' . $extra->id . '" name="' . $extra->id . '" class="form-control" id="' . $extra->id . '">';
                    break;
                } else {
                    $field = '<label for="' . $extra->id . '">' . $extra->extra_field_label . '</label><input type="' . $extra->extra_input_field_type . '" wire:model.lazy="extras.' . $extra->id . '" name="' . $extra->id . '" class="form-control" id="' . $extra->id . '">';
                }
            }
            break;

        case 'select':
            $values = explode(',', $extra->extra_enum_select_values);
            // Option des Select Feldes suchen
            $field_1 = '<label for="' . $extra->id . '">' . $extra->extra_field_label  . '</label><select name="' . $extra->id . '" wire:model="extras.'. $extra->id . '" class="form-control"  id="' . $extra->id .  '">';
            foreach ($values as $value) {
                $option = $option .'<option value="'. $value . '">' . $value . '</option>';
            }
            $field_3 = '</select>';

            $field = $field_1 . $option . $field_3;
            break;

        case 'checkbox' :
            $field = '<label for="' . $extra->id . '">' . $extra->extra_field_label  . '</label><br><input type="checkbox" name="' . $extra->id . '" wire:model="extras.'. $extra->id . '" class="" value="1"  id="' . $extra->id .  '">';
            break;
    }

     return $field;
}

我的问题是该值未显示在字体中。这意味着 mount 函数不能动态工作,但是如果我按照上面的描述直接放入它就可以了:

        foreach ($xs as $x) {
            $this->extras = [
                '4' => '12345678'
            ];
        }

但我想用这里的值动态加载字段:

        foreach ($xs as $x) {
            $this->extras = [
                $x->extra_id => $x->extra_value,
            ];
        }

感谢您的帮助:)

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 2021-03-10
    • 2021-02-05
    • 1970-01-01
    • 2019-08-29
    • 2021-07-09
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多