“数组到字符串的转换”错误 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' => $request->waypoints
不起作用,因为 $request->waypoints
是一个数组,您无法将数组保存到 VARCHAR()
字段中。如果您 implode
输入,并将其转换为逗号分隔的字符串,它应该可以正常工作:
`'waypoints' => implode(",", $request->waypoints`)
话虽如此,这通常被认为是一个坏主意;考虑使用Routes
和Waypoints
之间的关系作为单独的表,以确保清晰和易于使用(尤其是在检索/编辑时)。
【讨论】:
谢谢,成功了!我是否无法检索航点并将每个航点插入输入字段? 你可以肯定,但它是额外的逻辑来拉一个字符串,用逗号等分隔,而不是能够调用Route->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 行。发生了啥事?