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

时间:2011-10-08 19:27:44

标签: 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);       
}

我得到这个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语句中,我得到的内容与本教程中的相反:

  

调用带有以“_id”结尾的字段名称的refModel实际上将创建2个字段定义。例如,“publisher_id”将被定义为整数,并且将具有类型“reference”,并且还将添加字段“publisher”,具有完全相同的属性 - 但它将是计算字段并将使用子选择来确定值。

我想知道:

  1. 生成的SQL语句是否正确?
  2. 此VARCHAR附加生成字段的作用是什么? (我做了CRUD,当添加新记录时,该字段的值保存为NULL)。
  3. 当使用refModel()时,如果我只使用了模型名称('Person')我得到一个错误(无法包含Person.php),我必须使用完整的类名('Model_Person')。这个可以吗?我不应该只能使用型号名称吗?
  4. mandatory()不使用NOT NULL,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

使用refModel时,应使用“Model_Person”。 refModel,setModel和其他字段之间的一致性将在4.2中得到改进,由于兼容性原因,它没有完成。

SQL Generator本质上是不完整的,并且不完整,所以无论如何都要审查架构。例如,您可能有一些未在“模型”中定义的字段。此外,我更喜欢开发人员关注SQL,因为它可能无法精确地反映模型,一个模型可能通过连接使用多个表,或者模型可以继承每个表,然后在那里添加更多字段定义。

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

我将尝试添加有关在Agile Toolkit中有效使用模型的指南。