0

在过去的几个小时里,这个问题一直让我发疯。我将属性posts_published_date添加到我的用户实体(它跟踪特定用户最后发帖的日期)。以下是一些相关的行:

初始化实体中的属性。

/**
 * @Column(type="integer", length=3, nullable=false)
 */
protected $posts_published_today;
/**
 * @Column(type="string", length=7, nullable=true)
 */
protected $posts_published_date;
/**
 * @Column(type="integer", length=3, nullable=true)
 */
protected $posts_published_limit;

使用实体中的属性:

public function setPostsPublishedToday($value){
    $today = date("now");
    if ($today != $this->posts_published_date){
        $this->posts_published_today = 1;
        debug($this->posts_published_date . " != " . $today, "1");
        $this->posts_published_date  = $today;
        debug($this->posts_published_date . " == " . $today, "2");
    } else {
        $this->posts_published_today = $value;
    }
}

这两个调试使用以下输出运行:

Debug 1: != 220136
Debug 2: 220136 == 220136

posts_published_date没有存储在数据库中,但posts_published_today正在被检索和存储良好。

4

1 回答 1

0

为什么不使用该类变量的 setter 函数,而不是直接访问它?尝试:

public function setPostsPublishedToday($value)
{
   $today = date("now");
   if ($today != $this->getPostsPublishedDate()) {
      $this->posts_published_today = 1;
      $this->setPostsPublishedDate($today);
   } else {
      $this->posts_published_today = $value;
   }
}

这样,所有内容都通过您可以保证其行为的基本方法进行路由。如果您允许您的代码访问类变量,那么如果您碰巧更改了特定的 DB 列等,它将变得无法包含和调试的噩梦。当您尝试上述操作时会发生什么?你坚持一切吗?

于 2013-02-16T21:42:24.927 回答