Как сохранить значения multi select в Laravel 5.2

У меня есть форма в которой хранятся Новости.

enter image description here

здесь я использую Multiselect, и я хочу сохранить все выбранные опции в таблице,как говорят пользователи,персонал, cinemahall в виде строки.

моя функция контроллера для хранения значений -

 public function store(Request $request)
{

    $input=$request->all();

    General_news::create($input);
    return redirect()->back();
}

эта функция хранит все отправленные поля, но для multiselect она хранит только последний вариант i.e cinemahall

enter image description here

когда форма отправлено все выбранные параметры отображаются, но не сохраняются в таблице базы данных должным образом.

помогите мне решить эту проблему.

3 ответов


убедитесь, что вы установили атрибут name в массив

<select multiple="multiple" name="news[]" id="news">

чтобы сохранить его как строку, разделенную запятыми

$news = $request->input('news');
$news = implode(',', $news);

у вас есть строка, которая будет выглядеть как Users,staff,cinemahall. Теперь, вместо того, чтобы получить все входные данные, вам может потребоваться получить его один за другим, так как вам нужно мутировать news значение. Кроме того, вы также можете использовать except() метод исключения news от массы получать все значение.

$news = $request->input('news');
$news = implode(',', $news);

$input = $request->except('news');
//Assign the "mutated" news value to $input
$input['news'] = $news;

General_news::create($input);
return redirect()->back();

если вы используете multiselect, это, вероятно, означает, что вам нужно много для многих отношений и сводной таблицы. Типа как posts может принадлежать многим tags и tags может относиться ко многим posts.

в вашем случае это, вероятно, будет между news и news_types таблицы.


Спасибо @Chay22

вы также можете использовать мутаторы и аксессорhttps://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor

public function setFooAttribute($value)
{
    $this->attributes['foo'] = implode(',',$value);
}

public function getFooAttribute($value)
{
    return explode(',',$value);
}