Phalcon PresenceOf 字段是必需的
Phalcon PresenceOf field is required
我在更新数据库中的记录时遇到问题。
以下是错误:
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()
功能正常工作。
好的...我知道它为什么不起作用了。
我正在发布 true
/ false
值,但它需要整数值。
因此,传递 0
/ 1
而不是 true
/ false
可以正常工作。
我在更新数据库中的记录时遇到问题。 以下是错误:
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()
功能正常工作。
好的...我知道它为什么不起作用了。
我正在发布 true
/ false
值,但它需要整数值。
因此,传递 0
/ 1
而不是 true
/ false
可以正常工作。