如何从覆盖的雄辩的 save() 方法访问模型属性? (将空输入转换为空)

Posted

技术标签:

【中文标题】如何从覆盖的雄辩的 save() 方法访问模型属性? (将空输入转换为空)【英文标题】:How to access model attribute from an overrided eloquent save() method? (converting empty input to null) 【发布时间】:2014-09-02 12:56:51 【问题描述】:

使用下面评论https://***.com/a/13518727/3159370中提供的代码后,我想在模型保存之前访问模型属性并更改它们。

如果您好奇我为什么要这样做,我认为这是在将 empty(varchar) 0(integer) 转换为 null 之前将其保存到数据库中的最佳方法。

编辑:正在寻找的是一种遍历所有属性的通用方法。

【问题讨论】:

【参考方案1】:

您应该可以使用 $this 访问它:

class Page extends Eloquent 

   public function save()
   
      $this->sanitize();

      parent::save();
   

   public function sanitize()
   
      foreach($this->getAttributes() as $key => $value)
      
         if ( ! $value)
         
             $this->$key = null;
         
         
   

这是未经测试的代码,但应该可以工作。

【讨论】:

这是一个遍历所有已保存属性的通用函数吗?还是只是“名称”属性? 以前不是,但现在是。 感谢您的回复,理论上我应该猜到,它只接受我最终使用的选项数组的保存:public function save(array $options = array()) $this->sanitize() parent::save($options); ,但这次出现未知错误:"error":"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"syntax error, unexpected 'parent' (T_STRING)","file":"D:\\Laravel Mecscomp\\app\\models\\BaseModel.php","line":8 这只是$this->sanitize(); 上缺少的; 对不起,我的错,测试和工作,非常感谢。它仍然需要选项数组作为参数。

以上是关于如何从覆盖的雄辩的 save() 方法访问模型属性? (将空输入转换为空)的主要内容,如果未能解决你的问题,请参考以下文章

将对象返回为 json 时访问雄辩的关系

用属性实例化一个已经存在于数据库中的雄辩模型?

Laravel 雄辩模型如何从关系表中获取数据

如何从 hasManyThrough 雄辩关系返回 Laravel 中的单个模型

如何从每个父模型中获取 N 条记录?在 laravel 中雄辩

与模型属性的 where 条件的雄辩关系