在Laravel

时间:2016-02-18 16:48:30

标签: json laravel-5 eloquent

我正在尝试使用模型创建选项,这是我的数组:

$result = array(
            'match_id' => $input['id'],
            'score' =>  $input['score'],
            'result' =>  $input['result'],
            'headline' =>  NULL,
            'article' =>  $input['report'],
            'tries' =>  $input['try'],
            'try_amount' =>  $input['tryquant'],
            'conversions' =>  $input['conv'],
            'conv_amount' =>  $input['convquant'],
            'penalties' =>  $input['pens'],
            'pen_amount' =>  $input['penquant'],
            'dropgoals' =>  $input['dgs'],
            'dg_amount' =>  $input['dgquant']
            );

Result::create($result);

其中一些内容是数组本身。例如:

$input['penquant'] = [
"4"
]

当我运行我的代码时,它将数据作为数据保存到数据库并引发以下错误:

helpers.php第703行中的ErrorException:preg_replace():参数不匹配,pattern是一个字符串,而替换是一个数组

有人可以告诉我我做错了什么以及如何解决它?

2 个答案:

答案 0 :(得分:0)

不应该匆忙,忘了使用json_encode。

答案 1 :(得分:0)

最好的方法是在模型中使用mutators和accessors。

mutator的例子

// convert pen_amount from snake case to studly case
// The set...attribute (the ... is you field name which is in studly case) helps transform the data before you save it 
// into the database
public function setPenAmountAttribute($value)
{
    $this->attributes['pen_amount'] = serialize($value);
}

访问者的例子是

// convert pen_amount from snake case to studly case
// the get...Attribute (the ... is you field name which is in studly case) helps you convert the data back to it original state
public function getPenAmountAttribute($value)
{
    return unserialize($value);
}

您可以对要保存为数组的所有字段使用访问器和更改器。这很优雅。无需在控制器中手动使用json_encode和解码。