如何在 Laravel 7 中使用固定选项填充多个 Select

How to populate a Multiple Select with fixed option in Laravel 7

我有一个 edit.blade.php(用户个人资料),其中有多个 Select 应该显示固定选项。当我第一次编辑配置文件时,我收到错误消息。

错误:

Call to a member function toArray() on null (View: /Users/mnamazi/Sites/localhost/serresokhan/resources/views/panel/profile/edit.blade.php)

edit.blade.php :

<div class="col-xl-6">
     <div class="form-group">
         <label for="favorite">علاقمند شرکت در مسابقه</label>
         <select name="favorite[]" class="form-control kt-selectpicker @error('favorite') is-invalid @enderror" multiple>
             <option @if(in_array(1, $user->favorite)->toArray()) selected @endif value="1">گویندگی</option>
             <option @if(in_array(2, $user->favorite)->toArray()) selected @endif value="2">اجرا</option>
             <option @if(in_array(3, $user->favorite)->toArray()) selected @endif value="3">سخنوری</option>
         </select>
         @error('favorite')
            <div class="invalid-feedback"> {{ $message }}</div>
         @enderror
     </div>
</div>

不确定 in_array->toArray() 的目的是什么,因为关于 favorite 是模型中的列还是关系的信息不多。

如果favoriteuserstable上的一列,那你可以试试

<div class="col-xl-6">
     <div class="form-group">
         <label for="favorite">علاقمند شرکت در مسابقه</label>
         <select name="favorite[]" class="form-control kt-selectpicker @error('favorite') is-invalid @enderror" multiple>
             <option @if($user->favorite == 1) selected @endif value="1">گویندگی</option>
             <option @if($user->favorite == 2) selected @endif value="2">اجرا</option>
             <option @if($user->favorite == 3) selected @endif value="3">سخنوری</option>
         </select>
         @error('favorite')
            <div class="invalid-feedback"> {{ $message }}</div>
         @enderror
     </div>
</div>

但是如果是模型上的关系,那么

<div class="col-xl-6">
         <div class="form-group">
             <label for="favorite">علاقمند شرکت در مسابقه</label>
             <select name="favorite[]" class="form-control kt-selectpicker @error('favorite') is-invalid @enderror" multiple>
                 <option @if($user->favorite->id == 1) selected @endif value="1">گویندگی</option>
                 <option @if($user->favorite->id == 2) selected @endif value="2">اجرا</option>
                 <option @if($user->favorite->id == 3) selected @endif value="3">سخنوری</option>
             </select>
             @error('favorite')
                <div class="invalid-feedback"> {{ $message }}</div>
             @enderror
         </div>
    </div>

根据你的评论,它是一个数组,你可以试试这个。

请确保您已将 favorite 转换为模型上的数组。

public class User extends Model
{
    protected $casts = [
       'favorite'=>'array',
    ];
}

完成此操作后,Laravel 会自动将 favorite 属性转换为数组,并且可以使用 in_array.

在您的视图中访问
<div class="col-xl-6">
     <div class="form-group">
         <label for="favorite">علاقمند شرکت در مسابقه</label>
         <select name="favorite[]" class="form-control kt-selectpicker @error('favorite') is-invalid @enderror" multiple>
             <option @if(in_array(1,$user->favorite)) selected @endif value="1">گویندگی</option>
             <option @if(in_array(2,$user->favorite)) selected @endif value="2">اجرا</option>
             <option @if(in_array(3,$user->favorite)) selected @endif value="3">سخنوری</option>
         </select>
         @error('favorite')
            <div class="invalid-feedback"> {{ $message }}</div>
         @enderror
     </div>
</div>

我将 select 的 name 更改为 favoriteMain 但出现此错误:

in_array() expects parameter 2 to be array, string given

我的代码是:

<div class="col-xl-4">
     <div class="form-group">
         <label for="favoriteMain">اصلی</label>
         <select name="favoriteMain[]" class="form-control kt-selectpicker @error('favoriteMain') is-invalid @enderror" multiple>
               <option @if(in_array(1,$user->favoriteMain)) selected @endif value="1">اجرای صحنه</option>
               <option @if(in_array(2,$user->favoriteMain)) selected @endif value="2">اجرای تلوزیون</option>
               <option @if(in_array(3,$user->favoriteMain)) selected @endif value="3">اجرای رادیویی - صدا</option>
               <option @if(in_array(4,$user->favoriteMain)) selected @endif value="4">هم زبانان ( بین الملل )</option>
         </select>
     @error('favoriteMain')
         <div class="invalid-feedback"> {{ $message }}</div>
     @enderror
</div>