web-dev-qa-db-ja.com

Laravel 5.2に複数選択値を格納する方法

ニュースを保存するフォームを持っています。

enter image description here

ここでは、複数選択を使用しており、選択したすべてのオプションをテーブルに「Users、staff、cinemahall」という文字列として保存します。

値を保存するコントローラー関数は

 public function store(Request $request)
{

    $input=$request->all();

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

この関数は送信されたすべてのフィールドを保存しますが、複数選択の場合は最後のオプション、つまり映画館のみを保存します

enter image description here

フォームが送信されると、選択したすべてのオプションが表示されますが、データベーステーブルに適切に保存されません。

この問題の解決を手伝ってください。

7
dollar

必ず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();
_
22
Chay22

ありがとう@ 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);
}
1
Bdwey

複数選択を使用している場合は、多対多の関係とピボットテーブルが必要であることを意味します。 postsが多数のtagsに属し、tagsが多数のpostsに属すことができるのと同じようなものです。

あなたの場合、これはおそらくnewsnews_typesテーブルの間になります。

0
Ruffles