使用 Laravel 8 将单个列中的标签输入值存储到数据库中

Posted

技术标签:

【中文标题】使用 Laravel 8 将单个列中的标签输入值存储到数据库中【英文标题】:Store tag input values in a single column into database using Laravel8 【发布时间】:2021-11-22 11:05:32 【问题描述】:

我有以下带有tag input 的表格。

<form id="filialeform" action="filiales" enctype="multipart/form-data">
   csrf_field() 
  <input type="hidden" id="id_hidden" name="id" />
  <div class="form-group">
    <label>Filiale</label>
    <input type="text" class="form-control" name="filiale" id="filiale" placeholder="Filiale">
  </div>
  <div class="form-group">
    <label>Adm_Email</label>
    <input data-role="tagsinput" type="text" name="adm_email" id="adm_email">
  </div>
  <div class="modal-footer">

    <input type="hidden" name="action" id="action" />
    <input type="hidden" name="hidden_id" id="hidden_id" />
    <input type="submit" name="action_button" id="action_button" class="btn btn-warning" value="Enregistrer" />
    <span id="form_result"></span>
  </div>
</form>

我有以下数据库表:

 public function up()
    
        Schema::create('filiales', function (Blueprint $table) 
                
            $table->increments('id_filiale');
            $table->string('filiale',80);
            $table->string('adm_email',500);
            $table->integer('actif');
            $table->timestamps();
        );
    

我正在尝试将数据存储到数据库中,以便输入标签中输入的值存储在以伽马分隔的表格的adm_email 列中。

所以我正在尝试以下代码:

 public function store(Request $request)
    

        $input = $request->all();
        $tags = explode(",", $request->adm_email);
        $form_data = array(
             'filiale'     =>  $request->filiale,
             'adm_email'    =>   $tags
                        
                    );

         Filiale::create($form_data);

     return response()->json(['success' => 'Data Added successfully.']);
    

但我收到以下错误:

message: "Array to string conversion"

我不知道我怎么能意识到这一点。如果您有任何想法,请提供帮助。

【问题讨论】:

你能告诉我数据库中的示例输入和预期的output吗? 因为您试图将adm_emial 保存为Array 类型。 您正在使用explode() 方法及其制作数组,您无法在数据库中插入数组。 【参考方案1】:

转到 Model/Filiale.php 并添加以下内容:

protected $casts = [
    'adm_email' => 'array',
];

模型自动与数组进行转换。

【讨论】:

【参考方案2】:

在这一行:

$tags = explode(",", $request->adm_email);

explode 函数接受一个字符串(在这种情况下为 $request->adm_email)并将其转换为一个数组,因此当您尝试存储它时:

'adm_email'    =>   $tags

它失败了,因为您无法在数据库中存储数组。相反,您可以使用 :

将其转换为 json
'adm_email'    =>   json_encode($tags)

然后使用 json 从 json 转换它:

json_decode()

当您从数据库中检索它并希望对其进行处理时。

【讨论】:

感谢您的回答,现在可以使用了

以上是关于使用 Laravel 8 将单个列中的标签输入值存储到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:在单个 SQL 列中插入数组对象

如何通过控制器将两个不同模型的值作为 Laravel 8 中的单个返回变量传递给视图文件

我如何从Laravel中具有多行的列中扣除单个值

如何从包含在单个列中的文本构建 data.frame?

如何使用单个工匠命令在 Laravel 8 中创建多个模型?

如何使用模型类在 laravel 8 资源控制器中编辑、销毁和获取单个值?