2017-10-15 146 views
0

我在数据库中更新记录有问题。 下面是错误的:Phalcon PresenceOf字段是必需的

Phalcon\Mvc\Model\Message Object 
(
    [_type:protected] => PresenceOf 
    [_message:protected] => field1 is required 
    [_field:protected] => private 
    [_model:protected] => 
    [_code:protected] => 0 
) 
Phalcon\Mvc\Model\Message Object 
(
    [_type:protected] => PresenceOf 
    [_message:protected] => field2 is required 
    [_field:protected] => online 
    [_model:protected] => 
    [_code:protected] => 0 
) 

这是数据库模式:

CREATE TABLE `data` 
(
    `id`   BINARY(16) NOT NULL, 
    `id_second` BINARY(16) NOT NULL, 
    `field1`  TINYINT(1) NOT NULL DEFAULT 1, 
    `field2`  TINYINT(1) NOT NULL DEFAULT 1, 
    `field3`  INTEGER  NOT NULL DEFAULT 0, 
    `name`  VARCHAR(255) NOT NULL DEFAULT "", 

    PRIMARY KEY (`id`, `id_second`), 
    FOREIGN KEY (`id_second`) REFERENCES `data2` (`id`) 
); 

我可以创造新的纪录,但我不能更新。 记录发现后,我试图取代价值和改变它:

$record->name = $save['name']; 
$record->field1 = $save['field1']; 
$record->field2 = $save['field2']; 

$record->update(); 

但是,这显示上面给出的错误。我不知道为什么,因为当我显示$record->field1$record->field2时,它们不是null,而是true或false(这就是为什么它在数据库中为TINYINT)。

模型中没有验证规则,并且id和id_second字段被设置属性。

我试图做到这一点这样:

$result = Di::getDefault()->getModelsManager()->executeQuery(' 
     UPDATE \Pulsar\Model\Data SET 
      name = :name:, 
      field1 = :field1:, 
      field2 = :field2: 
     WHERE 
      id = :id: AND id_second = :id_d2: 
     ', [ 
      'id'  => $this->id, 
      'id_d2' => $this->id_second, 
      'name' => $this->name, 
      'field1' => $this->field1, 
      'field2' => $this->field2 
     ], [ 
      'id'  => \PDO::PARAM_STR, 
      'id_d2' => \PDO::PARAM_STR, 
      'name' => \PDO::PARAM_STR, 
      'field1' => \PDO::PARAM_INT, 
      'field2' => \PDO::PARAM_INT 
     ] 
    ); 

但结果是一样的。 然而,这个工程:

$v1 = $record->field1 ? 1 : 0; 
$v2 = $record->field2 ? 1 : 0; 
$record->getReadConnection()->execute(" 
    UPDATE data SET 
     name = '{$record->name}', 
     field1 = {$v1}, 
     field2 = {$v2} 
    WHERE 
     id = '{$record->id}' AND id_second = '{$record->id_second}' 
"); 

我怎样才能实现与update()save()功能一样吗?我提醒create()delete()功能工作正常。

回答

0

好的...我明白为什么它不起作用。 我发布了true/false值,但它需要整数值。

所以,通过0/1而不是true/false可以正常工作。

相关问题