ニュースを保存するフォームを持っています。
ここでは、複数選択を使用しており、選択したすべてのオプションをテーブルに「Users、staff、cinemahall」という文字列として保存します。
値を保存するコントローラー関数は
public function store(Request $request)
{
$input=$request->all();
General_news::create($input);
return redirect()->back();
}
この関数は送信されたすべてのフィールドを保存しますが、複数選択の場合は最後のオプション、つまり映画館のみを保存します
フォームが送信されると、選択したすべてのオプションが表示されますが、データベーステーブルに適切に保存されません。
この問題の解決を手伝ってください。
必ずname属性を配列に設定してください
_<select multiple="multiple" name="news[]" id="news">
_
カンマ区切りの文字列として保存するには
_$news = $request->input('news');
$news = implode(',', $news);
_
_Users,staff,cinemahall
_のような文字列があります。ここで、すべての入力を取得する代わりに、news
値を変更する必要があるため、1つずつ取得する必要がある場合があります。さらに、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();
_
ありがとう@ Chay22
mutatorsとAccessorを使用することもできます 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);
}
複数選択を使用している場合は、多対多の関係とピボットテーブルが必要であることを意味します。 posts
が多数のtags
に属し、tags
が多数のposts
に属すことができるのと同じようなものです。
あなたの場合、これはおそらくnews
とnews_types
テーブルの間になります。