Как сделать несколько выделенных элементов в раскрывающемся списке, если они сохранены в id laravel? - PullRequest
0 голосов
/ 24 января 2019

Я выбираю несколько идентификаторов классов при создании типа ввода с помощью разнесения, как я могу получить все выбранные идентификаторы классов в раскрывающемся списке в функции редактирования

Таблица классов

id 1 имя первый класс идентификатор 2 имя второй класс идентификатор 3 имя третий класс

Таблица типов выводов

идентификатор 1 идентификатор_класса 1,2,3, идентификатор 2 идентификатор_класса 1,2 id 3 class_id 2,1

Я сохраняю только id классов в таблице типов вводов, но когда я редактирую, я хочу

все выбранное значениевместо id

my route 
Route::get('admin/leadtypes/form', 'LeadTypesController@form');  add
Route::post('admin/leadtypes/post', 'LeadTypesController@update'); store
Route::get('admin/leadtypes/form/{id}', 'LeadTypesController@editForm'); edit


Add function 
public function form()    {
          $classes =  Classes::pluck('name','id');
     return view('leadtypes.form',$data,compact('classes'));

        }

My store/update function

 public function update(Request $request)
    {

     
      $data =  \Input::except(array('_token')) ;

                    $rule=array(
                      'name'   => 'required',

                             );

       $validator = \Validator::make($data,$rule);

      if ($validator->fails())
      {
              return redirect()->back()->withInput()->withErrors($validator->messages());
      }
      $inputs = $request->all();

      if(!empty($inputs['id'])){

          $item = LeadTypes::findOrFail($inputs['id']);

      }else{

          $item = new LeadTypes;

      }
      if(is_array($request->name)){
                  $item->name = implode(',', $request->name);
                }
      $item->status = $inputs['status'];
     
      $item->save();
      flash('success','record_added_successfully', 'success');
    return redirect('admin/leadtypes');

    }

edit function 

    public function editForm($id)
    {

      $item = LeadTypes::findOrFail($id);
      $data['active_class']       = 'Lead type';
      $data['title']              = getPhrase('Lead type');
       
    $classes =  Classes::pluck('name','id');
 $item->name =   explode(',', $item->name);

 

     return view('leadtypes.form',$data,compact('item','classes'));


    }

My view dropdown 

{!! Form::select('name[]',  $classes, !empty($item->name) ? $item->name : explode(',',old('name'))  ,['class' =>'form-control ' ,'required'=>'true','multiple'=>'true']); !!}

1 Ответ

0 голосов
/ 24 января 2019

Я думаю, что вы можете использовать метод LaravelCollective Form: :() в место, которое ему не нравится.Это немного привередливо для начала, и есть несколько проблем с тем, что у вас есть выше.

Я думаю, что $item->name на самом деле является строкой в ​​сохраненном виде.Если он установлен в БД, он будет проходить до вашей последней строки кода в виде строки:

!empty($item->name) ? $item->name : explode(...)

Вам нужно взорвать строку, сохраненную в БД, в ПЕРВОЙ части вашей операции вышеКроме того, чтобы это совпадало с массивом $classes для второго параметра в той же инструкции.Массив String <-> не будет работать и, следовательно, никогда не позволит выбрать значение из модели.

Я уверен, что это решит проблему.Однако я бы также мог пересмотреть вашу архитектуру по этому вопросу.Хранение этих массивов идентификаторов в одном поле (и поле с именем «имя» в единственном числе) немного сбивает с толку, а также усложняет вам жизнь.Возможно, стоит рассмотреть возможность включения этих типов LeadType в их собственные отношения ownToMany с их собственной дополнительной таблицей.Тогда вы можете просто сохранить два идентификатора и упростить все.Если это сработает, но вышесказанное должно ответить на ваш вопрос.

...