Symfony+Doctrine: Correct YAML syntax for default

2019-04-30 00:52发布

问题:

I am working on the schema for my Symfony app, and I need to set the default value of two boolean fields to false. However, with all the ways I've tried to do it, when the sql gets generated, it comes out with the default keyword, but no default value after it.

my last attempt was:

negotiable: 
    type: bool
    default: "false"
complete: 
    type: bool
    default: "false"

but I have also tried default: false, default: 'false', default: 0 since false is just an alias for 0 in MySQL, and default: '0'

Failing Query:

CREATE TABLE dormcode_project (id BIGINT AUTO_INCREMENT, client_id BIGINT, title VARCHAR(255), briefdesc LONGTEXT, spec LONGTEXT, coder_id BIGINT, paytype VARCHAR(30), negotiable bool DEFAULT , complete bool DEFAULT , created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX coder_id_idx (coder_id), INDEX client_id_idx (client_id), PRIMARY KEY(id)) ENGINE = INNODB

Notice negotiable bool DEFAULT , complete bool DEFAULT ,

The file I've been playing with is the /config/doctrine/schema.yml file. I'm kind of new to symfony/doctrine. I think this is the right one, but I guess I could be wrong. I do symfony cc between each attempt to insert the sql to make sure that it didn't cache the schema. But it almost seems like its not using the file I've been changing...

回答1:

Boolean is a synonym for TINYINT. Use integer(1) instead and set your default to 0/1.

Sources:

http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

http://www.symfony-project.org/doctrine/1_2/en/04-Schema-Files



回答2:

Since I haven't enough points to add a comment, I'll add it as an answer for people finding this through Google and the sorts like myself. I know it's an old question.

In Symfony 2.5 (at least), the correct way of setting a default value in YAML is as follows:

negotiable: 
    type: boolean
    options:
        default: 0
complete: 
    type: boolean
    options:
        default: 0


回答3:

Instead of using "bool" you should use "boolean" in schema. Also, default: false should work.