Как сохранить значения multi select в Laravel 5.2
У меня есть форма в которой хранятся Новости.
здесь я использую Multiselect, и я хочу сохранить все выбранные опции в таблице,как говорят пользователи,персонал, cinemahall в виде строки.
моя функция контроллера для хранения значений -
public function store(Request $request)
{
$input=$request->all();
General_news::create($input);
return redirect()->back();
}
эта функция хранит все отправленные поля, но для multiselect она хранит только последний вариант i.e cinemahall
когда форма отправлено все выбранные параметры отображаются, но не сохраняются в таблице базы данных должным образом.
помогите мне решить эту проблему.
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);
}