更新时奇怪的学说行为

时间:2010-06-05 09:10:03

标签: php doctrine

我有一个简单的表格如下:

class SnookerCurrentInfo extends Doctrine_Record 
{
  public function setTableDefinition() 
  {
    $this->hasColumn('current_frame_id', 'integer', 4, array('notnull' => 'false'));
    $this->hasColumn('current_player_id', 'integer', 4, array('notnull' => 'false'));
    $this->hasColumn('current_score1', 'integer', 4, array('notnull' => 'false'));
    $this->hasColumn('current_score2', 'integer', 4, array('notnull' => 'false'));
  }

  public function setUp()
  {
    $this->setTableName('snooker_current_info');
  }
}

我想在此表中只保留一个条目。因此,每次更改值时,我都会读取id = 1 out的条目并更改对象并执行save。如下:

$info = Doctrine::getTable('SnookerCurrentInfo')->find(1);

$info->current_frame_id = $jsonInfo['current_frame_id'];
$info->current_player_id = $jsonInfo['current_player_id'];
$info->current_score1 = $jsonInfo['current_score1'];
$info->current_score2 = $jsonInfo['current_score2'];

$info->save();

但奇怪的是,我试着说清楚。让我们首先说,条目是(30,1,1,0),我切换播放器,所以将条目更新为(30,2,1,0)。然后我再次切换播放器,所以条目应该更新为(30,1,1,0),但这不会影响数据库!!在数据库中,条目仍然为(30,2,1,0)!!!!

但是如果在(30,2,1,0)之后,我将分数更新为(30,2,1,1),然后将玩家切换回(30,1,1,1)然后就可以了。

那是什么?我应该如何处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

我意识到这个问题已经很老了,但也许这会帮助其他人。

在检查脏字段时,Doctrine 1.x(可能也是2.x)似乎在布尔值方面存在一些问题。自从我使用1.x以来已经有一段时间了,但是尝试将值从(int)1更新为0将无法正常工作,它无法识别更改(关于true / false的内容是我的猜测)。

我最终做的是在持久化更改之前用(字符串)0替换每个(int)0。

答案 1 :(得分:0)

您是否尝试使用update代替保存?

另一种方式可以作为一种保存但可能更符合您需要的方式

 $info->replace();

而不是save();