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”-但它将是一个计算字段,并将使用子选择来确定值
我想知道:
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可以处理“强制”条件,但它无法处理其他条件。此外,您可以在继承模型时删除“强制” 我将尝试添加一个关于在敏捷工具包中有效使用模型的指南