2017-10-15 3 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ではなく、真または偽である(なぜそれがデータベースに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

Ok ...私はなぜそれが動作していないか分かります。 true/falseの値を転記していますが、整数値が必要です。

したがって、true/falseの代わりに0/1を渡すと正しく動作します。

関連する問題