Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

raviawasti's avatar

How to have multiple selected item in drop-down if saved in id laravel?

I am selecting the multiple id of classes in creating leadtype via explode,how can i get all the selected id of classes in dropdown in edit function

Classes table

id 1 name class one id 2 name class two id 3 name class three

Leadtype table

id 1 class_id 1,2,3, id 2 class_id 1,2 id 3 class_id 2,1

I am saving only id of classes in leadtype table but when i edit i want all the value selected instead of 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']); !!}

0 likes
24 replies
cecosd's avatar

Hey @vickyaggarwal Why don't you do it with simple html where the select is still set to multiple TRUE. Regards

raviawasti's avatar

When i save & edit like this then it comes on my dropdown $classes = Classes::pluck('name','name'); $item->name = explode(',', $item->name);

But when i do like this $classes = Classes::pluck('name','id'); $item->name = explode(',', $item->name); it doenot come on dropdown selected

raviawasti's avatar

@CECOSD - When i save & edit like this then it comes on my dropdown $classes = Classes::pluck('name','name'); $item->name = explode(',', $item->name);

But when i do like this $classes = Classes::pluck('name','id'); $item->name = explode(',', $item->name); it doenot come on dropdown selected

YeZawHein's avatar

@vickyaggarwal -

 $classes = Classes::pluck('name' , 'id');
$item_class_ids =[ ];
foreach ($item->classes as $class) {
    $item_class_ids[$class->id] = $class->name;
}

cecosd's avatar

Hey @vickyaggarwal

I'm a bit confused. You are saying that you have One-To-Many reationship

One CLASS Multiple LEAD TYPES

Is that correct?

If yes and it is done like in the documentation https://laravel.com/docs/5.7/eloquent-relationships#one-to-many

You woudn't have any problmes.

Here's what I think you are doing.

You have one record in Leadtype table where class_id is some sort of array, instead of having multiple records for the same class_id.

Example:

classes table

id=1
name="test"
... 
other data
...
created_at
deleted_at


lead_types table

record one

class_id=1
... some other data

record two

class_id=1
... some other data

and etc.

And in the end you don't have to do explode of array. Please let me know am I on track with you on this one?

YeZawHein's avatar
Level 14

@vickyaggarwal let try this

public function editForm($id)
{
  $item = LeadTypes::findOrFail($id);
  $data['active_class']       = 'Lead type';
  $data['title']              = getPhrase('Lead type');
$classes =  Classes::pluck('name','id');
$item_class_ids =[ ];
foreach ($item->classes as $class) {
    $item_class_ids[$class->id] = $class;
}

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

And in your blade file

 @foreach($classes as $key => $class)
                        @if (array_key_exists($key, $item_class_ids))
            <option value="{{ $key }}" selected>{{ $class }}</option>
                        @else
                 <option value="{{ $key }}">{{ $class }}</option>
   @endif
   @endforeach
raviawasti's avatar

@CECOSD - i had combined mmade the image in paint may be some id will be mismatched

raviawasti's avatar

@YEZAWHEIN - I am doing exactly same you you said but getting Invalid argument supplied for foreach()

public function editForm($id) { $item = LeadTypes::findOrFail($id); $data['active_class'] = 'Lead type'; $data['title'] = getPhrase('Lead type'); $classes = Classes::pluck('name','id'); $item_class_ids =[ ]; foreach ($item->name as $class) { $item_class_ids[$class->id] = $class; }

return view('leadtypes.form2',$data,compact('item','classes',' item_class_ids ')); }

YeZawHein's avatar

I forgot passing variable $item_class_ids in compact function ! I already update my post !Hope u enjoy !

cecosd's avatar

@yezawhein @vickyaggarwal

yezawhein your solutions looks ok but i think that when you have the class_id as a string separated by comma you could just

public function editForm($id)
{
  $item = LeadTypes::findOrFail($id);
  $data['active_class']       = 'Lead type';
  $data['title']              = getPhrase('Lead type');
$classes =  Classes::pluck('name','id');
$item_class_ids =[ ];
foreach (explode(',', $item->classes) as $class) {
    $item_class_ids[$class->id] = $class;
}

 return view('leadtypes.form',$data,compact('item','classes'));
}
YeZawHein's avatar

@vickyaggarwal hey bro, i already told that i forgot passing variable in compact function! Please look ! If u have error, reply me soon!

raviawasti's avatar

@YEZAWHEIN - i had passed the variable like this..

return view('leadtypes.form2',$data,compact('item','classes','item_class_ids')); but still getitng this error, i am getting error due to this line

$item_class_ids[$class->id] = $class;

you can see my image to understand what i actually want

https://photos.app.goo.gl/J49LVrrohaQpPfU37

raviawasti's avatar

@YEZAWHEIN - <?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable; use Zizaco\Entrust\Traits\EntrustUserTrait; use Laravel\Cashier\Billable; use Cmgmyr\Messenger\Traits\Messagable;

class LeadTypes extends Authenticatable { protected $table = 'lead_types';

    public function LeadTypes()
  {
    return $this->belongsTo('App\LeadTypes','lead_type');
  }

}

raviawasti's avatar

@YEZAWHEIN -

Here is the answer ,Thank you soo much for helping me..

public function editForm($id) { $item = LeadTypes::findOrFail($id); $data['active_class'] = 'Lead type'; $data['title'] = getPhrase('Lead type'); $classes = Classes::pluck('name','id'); $item_class_ids =[ ];

foreach (explode(',', $item->name) as $class) {

$item_class_ids[$class] = $class;

}

return view('leadtypes.form2',$data,compact('item','classes','item_class_ids')); }

@foreach($classes as $key => $class) @if (array_key_exists($key, $item_class_ids)) {{ $class }} @else {{ $class }} @endif @endforeach

Please or to participate in this conversation.