关于 Laravel-admin 后台管理系统 setTagsAttribute 的正确使用
laravel-admin 后台管理系统setTagsAttribute方法的正常使用。
很多朋友在使用存入mysql 数据库时会提示 [Array to string conversion SQL: insert into]什么的,数据库不能存入array数组格式。
那是因为在存入字段钱没有进行数据处理。默认的是数组格式!需要怎么处理呢?
解决过程
解决问题的思路一直很清晰:根据路由规则找到表单提交的controller,然后将在存入数据库之前,将数组拼接成字符串。
Xdebug 是解决该问题必备的工具,稍后我将开设专栏详细讲解Xdebug相关的东西。
确定路由
**********************等等。
** 以上 多余的闲话就不多扯了!直接进入重点。
案例: blog 表 中有一个 tags字段。那么需要到Blog 模型里面添加如下方法:
public function setTagsAttribute($value)
{
$this->attributes['tags'] = implode(',', $value);
}
在models对应模型中添加如上字段后,就可以直接使用了;
原理如下:
foreach ($inserts as $column => $value) {
$this->model->setAttribute($column, $value);
}
$this->model->save();
这里调用了先调用了model的setAttribute方法将数据设置为model的属性,然后save。那么我们是否可以针对这个单独的model来在这里处理呢?这样的好处在于不会影响别的model。进入setAttribute方法。
if ($this->hasSetMutator($key)) {
return $this->setMutatedAttributeValue($key, $value);
}
这个方法的第一步,就是判断这个属性有没有单独的设置方法(hasSetMutator),这不正好满足了我们的需求么?进入hasSetMutator方法:
return method_exists($this, 'set'.Str::studly($key).'Attribute');
发现,这里使用了一个字符串拼接的方式来确定是否要调用该属性的设置方法。也就是说,如果在model中定义了某个属性的设置方法setXxxAttribute
,就会调用这个方法来赋这个属性的值(调用setMutatedAttributeValue方法:
return $this->{'set'.Str::studly($key).'Attribute'}($value);
到此,已经完全讲解完毕,如有不懂可以扫码加我。
本作品采用《CC 协议》,转载必须注明作者和本文链接
laravel-admin 官方文档就有,仔细看