如何修复错误:传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是数组类型,给定字符串,在中调用

Tru*_*ham 3 php laravel

我有一个输入来输入标签。每门课程都会有很多标签,我想将这些标签保存在同一列中。

输入

    <div class="card border-grey border-lighten-3 px-2 py-2 box-shadow-1 mt-1">
        <h4 class="content-header-title"> Tags </h4>
            <select name="tags[]" data-tags="true" id="tags" class="form-control" multiple="multiple">
                <option value=""></option>
            </select>
    </div>
Run Code Online (Sandbox Code Playgroud)

脚本选择2

<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.min.js"></script>
  <script>
    $(document).ready(function(){
      $('#tags').select2({
        placeholder: "Tags",
        tags: true
      });
    });
 </script>
Run Code Online (Sandbox Code Playgroud)

控制器


    function save(Request $request)
    {
        $lesson = new Lesson;
        $lesson->tags= $request->input('tags');
        $lesson->content = $request->content;
        $lesson->save();
        return redirect(url('admin/lessons/edit'))->with('message', 'Successful');
    }

Run Code Online (Sandbox Code Playgroud)

但是当我点击保存时,出现这样的错误:

传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是给定的数组、字符串类型,在 C:\Xampp-install\htdocs\eduwebsite\vendor\laravel\framework\src\Illuminate\Database\Query 中调用\Grammars\Grammar.php 第 869 行

Moh*_*d b 6

如果你想将标签作为数组存储在数据库中,你可以使用序列化

$lesson->tags= serialize($request->tags);
Run Code Online (Sandbox Code Playgroud)

或者更好的方法是使用Array & JSON Casting

class Lesson extends Model
{
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'tags' => 'array',
    ];
}
Run Code Online (Sandbox Code Playgroud)