不将 php-redbean 的属性保存到数据库

Posted

技术标签:

【中文标题】不将 php-redbean 的属性保存到数据库【英文标题】:Not saving property of a php-redbean to database 【发布时间】:2013-07-25 22:03:23 【问题描述】:

我正在使用 Redbean 作为我的 php 应用程序的 ORM。

每个用户(这种情况下的员工)都必须有密码才能登录,我想我会为他们生成一个密码,这样他们就不必在表单中输入密码了。

显然,这意味着它们都必须有一个盐,并且唯一存储的密码应该是实际密码的哈希值。因此,我必须将密码发送给用户(否则他们不会知道:D),因此必须将其作为对象的属性,而不是将其保存到数据库中。

生成密码的一个聪明地方是在模型中,因此它基本上为每个新员工(用户)自己完成,因此我创建了这个模型:

class Model_employee extends RedBean_SimpleModel

  public function dispense()
  
    $this->salt = cypher::getIV(32);
    $this->tempPassword = cypher::getIV(8);
    $this->password = md5($this->salt . $this->password);
  

  public function update()
  
    unset($this->tempPassword);
  

dispense() 中的生成密码工作正常。 update() 应该在保存 bean 之前运行,所以它是(如果我将属性设置为 null,它将保存为 null),但是,即使我取消设置 tempPassword 仍然保存(该列是也创建了,即使我将它存储为空)。

基本上,问题归结为:如何摆脱tempPassword 属性,使其不保存到数据库中?

【问题讨论】:

【参考方案1】:

事实证明,几天前有人在readBean forum 中问了这个确切的问题。

基本上,redbean 不会存储任何类扩展的私有属性。

解决方案非常简单:

class Model_employee extends RedBean_SimpleModel

  private $tempPassword;
  public function dispense()
  
    $this->salt = cypher::getIV(32);
    $this->tempPassword = cypher::getIV(8);
    $this->password = md5($this->salt . $this->password);
  

这不会将密码存储在数据库中,也不会创建列。 当然,如果我想读取密码,我必须添加一个 getter(),但上面解决了眼前的问题:)

【讨论】:

以上是关于不将 php-redbean 的属性保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章

不将 Json 数据保存到文件中

CoreData 不将数据保存到数据库

hsqldb 不将数据写入或保存到磁盘

不将引导日期值保存到 Laravel 中的数据库表

knitr sql块不将数据保存到变量中

Rails:回形针不将图像保存到数据库