Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SchemaGenerator附加VARCHAR字段,为什么?_Php_Mysql_Sql_Atk4 - Fatal编程技术网

Php SchemaGenerator附加VARCHAR字段,为什么?

Php SchemaGenerator附加VARCHAR字段,为什么?,php,mysql,sql,atk4,Php,Mysql,Sql,Atk4,从该模型生成表时: function init() { parent::init(); $this->addField('person_id')->refModel('Model_Person')->mandatory(true); $this->addField('username')->mandatory(true); $this->addField('password')->mandatory(true

从该模型生成表时:

function init()
{
    parent::init();
    $this->addField('person_id')->refModel('Model_Person')->mandatory(true);
    $this->addField('username')->mandatory(true);       
    $this->addField('password')->mandatory(true);       
}
我得到以下SQL语句:

create table users (     
    id int auto_increment not null primary key,
    person_id varchar(255),
    person int(11),
    username varchar(255),
    password varchar(255));
在这个SQL语句中,我得到了与教程中所说的相反的结果:

调用以“\u id”结尾的字段名的refModel实际上将创建两个字段定义例如,“publisher\u id”将被定义为整数,类型为“reference”,还将添加一个属性完全相同的字段“publisher”-但它将是一个计算字段,并将使用子选择来确定值

我想知道:

  • 生成的SQL语句正确吗
  • 这个VARCHAR额外生成的字段做什么?(我制作了CRUD,当添加新记录时,该字段的值保存为NULL)
  • 使用
    refModel()
    时,如果仅使用模型名(“Person”),则会出现错误(无法包含Person.php),必须使用完整的类名(“model\u Person”)。这样行吗?难道我不能只使用模型名吗
  • mandatory()
    不使用NOTNULL,有没有办法做到这一点

  • 生成的SQL语句不正确。这是发电机中的一个错误。您只需要一个字段,输入以_id结尾的“int”

    之所以这样做,是因为refModel()实际上在模型中创建了两个字段,一个用于编辑(_id),另一个用于列出数据(作为子查询)

    当您使用refModel时,应该使用“Model\u Person”。refModel、setModel和其他字段之间的一致性将在4.2中得到改进,但由于兼容性原因,没有这样做

    SQL生成器本质上是不完整的,不可能是完整的,所以最好还是检查模式。例如,您可能有一些未在“模型”中定义的字段。另外,我更希望开发人员注意SQL,因为它可能不会精确地反映模型,一个模型可能通过连接使用多个表,或者模型可能继承每个表,然后在其中添加更多字段定义

    mandatory()是一个模型级需求,其工作方式与其他验证类似。虽然MySQL可以处理“强制”条件,但它无法处理其他条件。此外,您可以在继承模型时删除“强制”

    我将尝试添加一个关于在敏捷工具包中有效使用模型的指南