【问题标题】:"Array to string conversion" errorr Laravel - Trying to save array to database“数组到字符串的转换”错误 Laravel - 尝试将数组保存到数据库
【发布时间】: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 [ ]”才能使谷歌地图航点工作,我现在将名称更改为“航点”,但只有第一个航点提交到数据库。 (以上代码还是一样的)

标签: arrays database laravel laravel-5


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 2022-01-25
        • 2016-09-01
        • 1970-01-01
        • 2014-12-14
        • 2018-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多