如何在 Laravel 的选择选项中使用“枚举”值?

Posted

技术标签:

【中文标题】如何在 Laravel 的选择选项中使用“枚举”值?【英文标题】:How to use "enum" values in select option in Laravel? 【发布时间】:2018-12-14 09:17:53 【问题描述】:

我在 Laravel 刀片中的构建选择有问题,并且只使用数据库中的两种类型值

我的迁移中有专栏:

$table->enum('contact_way', ['email', 'phone']);  

我必须在我的刀片形式中使用它来更新,我使用简单的@if 语句但它并不好

<select class="form-control" name="contact_way">
    @if ($customer_event->contact_way === "email")
        <option value="email" selected>Kontakt e-mail</option>
        <option value="phone" >Kontakt telefoniczny</option>
    @else
        <option value="email" >Kontakt e-mail</option>
        <option value="phone" selected>Kontakt telefoniczny</option>
    @endif
</select>

我想使用 foreach 状态,我将它用于事物并检查女巫一个是否正确,这个节目就像被选中但我不知道该怎么做

【问题讨论】:

【参考方案1】:

有很多方法可以做到这一点,但请查看您的代码。你重写整个选项只是为了改变一个词:选中。

只需编写一个条件来处理该单词(使用三元运算符):

<option value="email" <?= $customer_event->contact_way === 'email' ? 'selected' : '' ?>>Kontakt e-mail</option>
<option value="phone" <?= $customer_event->contact_way === 'phone' ? 'selected' : '' ?>>Kontakt telefoniczny</option>

我认为没有必要只包含两个元素的 foreach 循环,但如果你真的需要,你可以创建一个选项数组来循环。

【讨论】:

感谢您的帮助,与我的代码相比,它看起来非常好。【参考方案2】:

您不必定义&lt;option&gt; 两次。试试这个:

<select class="form-control" name="contact_way">
    @foreach(["email" => "Kontakt e-mail", "phone" => "Kontakt telefoniczny"] AS $contactWay => $contactLabel)    
    <option value=" $contactWay "  old("contact_way", $customer_event->contact_way) == $contactWay ? "selected" : "" > $contactLabel </option>
    @endforeach
</select>

这将生成带有两个选项的select,每个选项都有一个用于value="" 属性的$contactWay 和一个用于实际html$contactLabel。此外,会将您选择的值默认为最后输入的值,或来自$customer_event-&gt;contact_way的值

【讨论】:

谢谢它的工作非常好,我想我不应该定义我的 默认选择的值是第一个输入,而不是最后一个。 @ChinLeung 不,选择的值是通过old("contact_way", $customer_event-&gt;contact_way) 设置的,或者在这种情况下$customer_event-&gt;contact_way 设置为任何值。如果是null,或者未设置,则默认设置email 哦,我误解了你写句子的方式。我以为您的意思是如果之前没有选择任何内容,它将选择最后一个元素。 啊,是的,对不起。我所说的“最后输入”是指您最后提交给服务器的任何内容;这就是old() 所做的。【参考方案3】:

在您的模型中:

protected $contact_way = ['email', 'phone'];

现在循环为

@foreach($customer_event['contact_way']'as $contact)
        <option value="$contact" @if($contact == $customer_event->contact_way) "selected" @endif > $contact</option>
@endforeach

【讨论】:

$customer_event['contact_way'] 为空

以上是关于如何在 Laravel 的选择选项中使用“枚举”值?的主要内容,如果未能解决你的问题,请参考以下文章

如何以 laravel 刀片形式生成输入选择并自定义其选项值?

如何将数据库中的值显示到 Laravel 和 Ajax 中的选项值

在选择选项 laravel 上保存名称值而不是 id

使用 laravel 根据选择标签的选项值查看新的 div

如何检索选定的选项值?

Laravel Livewire:在选择输入的更改上传递选项值