如何在数据库的单个列中保存多个复选框值并使用 laravel 检索它

How do I save multiple checkbox values in a single column in the database and retrieve it using laravel

我的管理面板上有 15 个复选框,因此只有网站管理员可以 select 或取消它们。

我需要像这样保存在 table 中选中的复选框:

Name: car,food,game,...

HTML:

{{Form::open(['action'=>'adminHobbyController@store'])}}
    <div class="form-group">
        <label for="art" class="checkbox-inline">
            {{Form::checkbox('art[]','art')}}Art
         </label>
         <label for="artitecture" class="checkbox-inline">        
              {{Form::checkbox('artitecture[]','artitecture')}}Artitecture
         </label>
          <label for="business" class="checkbox-inline">
              {{Form::checkbox('business[]','business')}}Business
          </label>
              ...
          <div class="form-group">
              {{Form::submit('ADD',['class'=>'form-control'])}} 
          </div>
 {{Form::close()}}

我的控制器存储功能:

 public function store(Request $request)
 {
    $add_hobby=new Hobbies;
    $add_hobby->name=$request->all();
    $add_hobby->save();
    return redirect()->back();
 }

也试试这个,但只保存最后一个:

public function store(Request $request)
 {
    $add_hobby=new Hobbies;
    $add_hobby->name=$request->input('car');
    $add_hobby->name=$request->input('food');
      ...
   $add_hobby->name=$request->input('fashion');
    $add_hobby->save();
    return redirect()->back();
 }

我也试过了,但出现错误:

 public function store(Request $request)
{
    $request->merge([
    'name' => implode(',', (array) $request->input('game')),
    'name' => implode(',', (array) $request->input('food')),
      ...
      'name' => implode(',', (array) $request->input('fashion')),
]);

    $add_hobby=new Hobbies;
    $add_hobby->name=$request->input()->all();
    $add_hobby->save();
    return redirect()->back();
}

有人可以帮忙吗?

当然没有必要在一栏中保存,但我也不知道另一种保存方式

您可以使用 implode 方法并将其存储在变量中,然后将其分配给列。

$add_hobby->[column]= $array_imploded;

首先,确保您要存储这些值的列是 varchar 或 text 并且可以存储您要放在那里的所有文本。

其次,根据您的值创建一个 JSON 字符串。 (或序列化数组字符串,但 JSON 更好读)。然后只需将此设置存储为字符串,不要忘记在访问此数据时将 JSON 解析回数组。

此链接会对您有所帮助:

http://php.net/manual/en/function.json-encode.php

http://php.net/manual/en/function.json-decode.php

对于这种情况,您选择一个序列化数组: http://php.net/manual/en/function.serialize.php

您这样做会创建多个数组

{{Form::checkbox('art[]','art')}}Art

代替 art[] 使用类似 hobby[] 的东西,然后将 art 作为值

试试这个

    <label for="art" class="checkbox-inline">
        {{Form::checkbox('hobby[]','art')}}Art
     </label>
     <label for="artitecture" class="checkbox-inline">        
          {{Form::checkbox('hobby[]','artitecture')}}Artitecture
     </label>
      <label for="business" class="checkbox-inline">
          {{Form::checkbox('hobby[]','business')}}Business
      </label>
          ...
      <div class="form-group">
          {{Form::submit('ADD',['class'=>'form-control'])}} 
      </div>

然后在你的控制器中你会像

foreach ($request->input("hobby") as $hobby){
        $add_hobby = new Hobbies;
        $add_hobby->name= $hobby;
        $add_hobby->save();
}

您可以通过一个简单的步骤一次性保存它。

 <label for="art" class="checkbox-inline">
    {{Form::checkbox('art','art')}}Art
 </label>
 <label for="artitecture" class="checkbox-inline">        
      {{Form::checkbox('artitecture','artitecture')}}Artitecture
 </label>
  <label for="business" class="checkbox-inline">
      {{Form::checkbox('business','business')}}Business
  </label>
      ...
  <div class="form-group">
      {{Form::submit('ADD',['class'=>'form-control'])}} 
  </div>

然后在你的控制器中,

$hobby = implode(",",array_keys($request->except(['_method','_token'])))
//Exclude the parameters from the $request using except() method
//now in your $hobby variable, you will have "art,artitecture,business"

$add_hobby=new Hobbies;
$add_hobby->name=$hobby;
$add_hobby->save();

不要忘记排除您不需要的数据。