繁体   English   中英

如何使模型在Phalcon PHP Framework中使用默认值?

[英]How to make models use defaults in Phalcon PHP Framework?

如果某个表在某些字段上有默认值并且不允许NULL,则可以预期插入脚本将使用这些默认值,就像MariaDB / MySQL通常那样。 例如,如果表产品具有AI字段“id”,必填字段“name”和两个必填字段“active”和“featured”都默认为1,则查询

INSERT INTO products (name) VALUES ('someName');

自动插入1作为活动和特色的值。 但是,当使用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'));
    }
}

虽然我发现twistedxtra的答案非常吸引人,因为Phalcon包含了这个邪恶的方法来读取列的默认值,但我从架构的角度来看,这可能是错误的方法,因为你依靠数据库来定义你的属性的默认值。模型。

我在声明属性时设置默认值并将逻辑保留在应用程序层中。 但那只是我。

使用如下

skipAttributesOnCreate将确保Phalcon不会尝试在该列中放置一个值。 数据库将应用默认值。

public function initialize()
{
    $this->setSource('table_name');
    $this->skipAttributesOnCreate(['name_of_column']);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM