如果一个表在某些字段上有默认值并且不允许 NULL,那么人们会期望插入脚本使用这些默认值,就像 MariaDB/MySQL 通常那样。例如,如果表 products 有一个 AI 字段“id”,一个必填字段“name”和两个必填字段“active”和“featured”,它们都默认为 1,那么查询
INSERT INTO products (name) VALUES ('someName');
自动插入 1 作为 active 和 featured 的值。然而,当像这样使用 Phalcon 的模型时:
$product = new Products();
$product->setName('someName');
$product->save();
返回验证错误,指出“active”和“featured”是必需的。
我是否应该在模型生成期间提供一个标志,以便 Phalcon 工具收集默认值并将其输入到模型类中,或者是否有其他方法让 Phalcon 在找到时自动使用默认值?我认为最好的方法就是忽略未设置的字段。我可以让模型做到这一点吗?
最佳答案
您可以使用原始数据库值来避免这种情况,在特定的插入中:
<?php
use Phalcon\Db\RawValue;
$product = new Products();
$product->setName('someName');
$product->setType(new RawValue('default')); //use default here
$product->save();
或者,一般在创建/更新特定字段之前:
use Phalcon\Db\RawValue;
class Products extends Phalcon\Mvc\Model
{
public function beforeValidationOnCreate()
{
$this->type = new RawValue('default');
}
}
或者忽略生成的每个 SQL INSERT 中的这些字段:
use Phalcon\Db\RawValue;
class Products extends Phalcon\Mvc\Model
{
public function initialize()
{
$this->skipAttributesOnCreate(array('type'));
}
}
关于php - 如何使模型在 Phalcon PHP Framework 中使用默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951959/