关于 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);

到此,已经完全讲解完毕,如有不懂可以扫码加我。

关于laravel-admin 后台管理系统setTagsAttribute的正确使用

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

laravel-admin 官方文档就有,仔细看

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!