2014-02-09 37 views

回答

35

您可以保存/插入序列化数据到一个TEXT类型字段,但对于这一点,你必须使用php的东西,例如:

$arr = array('x', 'y', 'z'); 

要插入到这个数据库字段,你可以使用serialize之类的函数这

$serializedArr = serialize($arr); 

现在,您可以到DATABSE插入$serializedArr阵列,当您检索数据使用,只需unserialize它使用somethig,如:

$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类型字段,则在您的Eloquent模型上访问数组时,将该数组强制添加到该属性将自动将该属性反序列化为一个PHP数组,并且该数组将自动序列化回到JSON当你设置值这个属性,例如:

$user = User::find(1); 

// $options is an array... 
$options = $user->options; 

// options is automatically serialized back to JSON... 
$user->options = ['foo' => 'bar']; 
+2

thx,确实死了简单使用访问器和mutators,在我的情况下非常适用 –

+0

为什么不使用CASTing?详情请阅读我的回答。 –

+0

当你想编辑存储的数据时,你做了什么? – Shweta

6

,最好的办法是投你的表字段是这样的:

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属性应该是 是一个数组,其中键是被投射属性的名称, ,而值是您希望投射到该列的类型。 支持的投射类型为:整数,实数,浮点数,双精度,字符串, 布尔值,对象,数组,采集日期和日期时间

唯一限制该文档不说的是,你可以用这个数组不工作直接,这样

$myTable.my_field[]='new array element'; 

相反,你必须单独准备数组,然后将其分配给该领域,像这样:

$temp=[]; 
$temp[]='new array element'; 
$myTable.my_field[]=$temp; 
相关问题