2017-10-15 4 views
0

J'ai un problème avec les enregistrements de mise à jour dans la base de données. Voici les erreurs:Le champ Phalcon PresenceOf est requis

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 
) 

C'est le schéma de base de données:

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`) 
); 

Je peux créer un nouveau dossier, mais je ne peux pas le mettre à jour. Après trouver record que je suis en train de remplacer les valeurs et le changer:

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

$record->update(); 

Mais cette affiche des erreurs indiquées ci-dessus. Je ne sais pas pourquoi, parce que j'affiche $record->field1 et $record->field2 ils ne sont pas null mais vrai ou faux (c'est pourquoi c'est TINYINT dans la base de données).

Il n'y a pas de règles de validation dans le modèle et l'ID et les champs id_second sont paramétrés proprement.

J'ai essayé de le faire de cette façon:

$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 
     ] 
    ); 

mais le résultat est le même. Cependant, cela fonctionne:

$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}' 
"); 

Comment puis-je obtenir la même chose avec update() ou save() fonction? Je rappelle que les fonctions create() et delete() fonctionnent correctement.

Répondre

0

Ok ... Je vois pourquoi ça ne marche pas. Je publie des valeurs true/false, mais elle nécessite des valeurs entières. Donc, en passant 0/1 au lieu de true/false fonctionne correctement.