“数组到字符串的转换”错误 Laravel - 尝试将数组保存到数据库

Posted

技术标签:

【中文标题】“数组到字符串的转换”错误 Laravel - 尝试将数组保存到数据库【英文标题】:"Array to string conversion" errorr Laravel - Trying to save array to database 【发布时间】:2018-10-03 18:33:36 【问题描述】:

对不起,我是 Laravel 的新手,第一次尝试保存到数据库。我试图将数组保存到数据库,但出现“数组到字符串转换”错误。我尝试将迁移文件中的字符串值更改为其他选项,但出现相同的错误。

控制器

    public function store(Request $request)
   
    Myroutes::create([ //posting to acc table
        'start' => $request->start,
        'end' => $request->end,
        'waypoints' => $request->waypoints
    ]);

    return redirect('/');

迁移

 public function up()

    Schema::create('myroutes', function (Blueprint $table) 
        $table->increments('myroute_id');
        $table->integer('user_id');
        $table->string('start');
        $table->string('end');
        $table->string('waypoints');
        $table->timestamps();
    );

型号

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Myroutes extends Model

    protected $fillable = [
        'user_id',
        'start',
        'end',
        'waypoints'
    ];

查看

<div id="dynamicInput" class="form-group">
                    <label>Additional Destinations</label>
                    <input type="text" name="waypoints[]" class="form-control" autocomplete="on">
                </div>

数据库表

database-img

【问题讨论】:

航点应该是一个数组吗?任何你将它存储为字符串?。 我认为我需要“waypoints [ ]”才能使谷歌地图航点工作,我现在将名称更改为“航点”,但只有第一个航点提交到数据库。 (以上代码还是一样的) 【参考方案1】:

您的表单输入“航点”是一个数组! 因此,您必须先“转换”它,然后才能进行插入

【讨论】:

【参考方案2】:

您遇到错误:'waypoints' =&gt; $request-&gt;waypoints 不起作用,因为 $request-&gt;waypoints 是一个数组,您无法将数组保存到 VARCHAR() 字段中。如果您 implode 输入,并将其转换为逗号分隔的字符串,它应该可以正常工作:

`'waypoints' => implode(",", $request->waypoints`)

话虽如此,这通常被认为是一个坏主意;考虑使用RoutesWaypoints 之间的关系作为单独的表,以确保清晰和易于使用(尤其是在检索/编辑时)。

【讨论】:

谢谢,成功了!我是否无法检索航点并将每个航点插入输入字段? 你可以肯定,但它是额外的逻辑来拉一个字符串,用逗号等分隔,而不是能够调用Route-&gt;waypoints 并检索一个很好的Waypoint 模型数组。阅读:laravel.com/docs/5.6/eloquent-relationships;无论如何都知道有用的东西。 或将其保存为数据库中的 json 字段并将其转换为数组 @Indra 当然,JSON 列也可以,只要 RDBMS 支持它。 @TimLewis 查看我关于尝试将其从数据库中发布的新问题 - 谢谢! ***.com/questions/50045184/…【参考方案3】:

表单提交后尝试这样做:

dd($request->all());

然后您将看到将保存的内容,并且会看到航点是数组。您不能将数组保存为字符串,您必须将其转换为字符串。变量是数组,因为:

name="waypoints[]"

这样放就不是数组了:

name="waypoints"

【讨论】:

我担心如果名称中没有方括号,谷歌地图航点将无法工作。我删除了它,它仍然可以工作,但现在只有第一个航点提交到数据库,因为我将它改回 'waypoints' => $request->waypoints【参考方案4】:
protected $casts = [
        'theme_setting' => 'array'
];

只需在类中的模型中使用强制转换

【讨论】:

【参考方案5】:

我将它用于 laravel 5.8

$array = $request->names;
$array = implode(',', $array);
$request['names'] = $array;
$distribute = User::create($request->all());

【讨论】:

以上是关于“数组到字符串的转换”错误 Laravel - 尝试将数组保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.8.38 中上传多个文件时数组到字符串的转换错误

尝试使用 AJAX 在 Laravel 中上传单个文件时出现数组到字符串转换错误

如何使用 Laravel Eloquent 在数据库中保存 JSON 响应,我收到错误“数组到字符串转换”

Laravel Fortify,Vuex。数组到字符串的转换错误。 FortifyServiceProvider.php 第 40 行。发生了啥事?

laravel - ErrorException 数组到字符串的转换

Laravel 雄辩不更新 JSON 列:数组到字符串的转换