2017-10-15 64 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可以正常工作。

相關問題