数据库表在列中存储Array或stdObject的架构是什么?
当我使用 - >字符串并插入数组变量时,它只在db列中存储单词“Array”。
Laravel是否支持数组?
如果不是,我应该采用什么方法?
答案 0 :(得分:48)
您可以将序列化数据保存/插入TEXT
类型字段,但为此您必须使用php
,例如:
$arr = array('x', 'y', 'z');
要将其插入数据库字段,您可以使用serialize这样的功能
$serializedArr = serialize($arr);
现在,您可以将$serializedArr
数组插入到数据库中,当您检索要使用的数据时,只需unserialize使用类似的数据:
$record = SomeModel::find(1);
unserialize($record->field_name);
此外,您可以使用Laravel的accessors-and-mutators使整个事情自动化,查看手册,这很简单。如果您需要有关此accessors-and mutators
的更多帮助,请留言,其中包含table
个详细信息。
<强>更新强>
由于Laravel 5.x
允许attribute casting,因此可以将属性转换为另一种数据类型,以便在运行时进行转换。在这种情况下,只需声明protected $casts
属性,例如:
protected $casts = [
'is_admin' => 'boolean', // Will convarted to (Bool)
'options' => 'array', // Will convarted to (Array)
];
array
强制转换对于处理存储为序列化JSON
的列特别有用。例如,如果您的数据库具有包含序列化JSON的TEXT
类型字段,那么当您在{{1}上访问该属性时,将该属性添加到该属性将自动将该属性反序列化为PHP
数组。当你为这个属性设置值时,它会被自动序列化回Eloquent
,例如:
JSON
答案 1 :(得分:8)
自Laravel 5.1以来,最好的办法就是像这样对你的桌面进行搜索:
class Mytable extends Model
{
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'my_field' => 'array',
];
阅读有关Laravel official documents page的属性转换的更多信息。 引用:
模型上的$ casts属性提供了一种方便的方法 将属性转换为常见数据类型。 $ casts属性应该 是一个数组,其中键是要转换的属性的名称, 而值是您希望转换为列的类型。该 支持的强制类型是:整数,实数,浮点数,双精度,字符串, 布尔值,对象,数组,集合,日期和日期时间。
文档没有说明的唯一限制是不能直接使用此数组,就像这样
$myTable.my_field[]='new array element';
相反,您必须单独准备数组,然后将其分配给字段,如下所示:
$temp=[];
$temp[]='new array element';
$myTable.my_field[]=$temp;
如果您使用旧版本的Laravel,请使用 The Alpha 提供的答案,或者更好,退出您的工作:)。