从此模型生成表时:
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”,具有完全相同的属性 - 但它将是计算字段并将使用子选择来确定值。
我想知道:
refModel()
时,如果我只使用了模型名称('Person')我得到一个错误(无法包含Person.php),我必须使用完整的类名('Model_Person')。这个可以吗?我不应该只能使用型号名称吗? mandatory()
不使用NOT NULL,有没有办法做到这一点?答案 0 :(得分:1)
生成的SQL语句不正确。这是发电机的一个错误。您只需要一个以_id结尾的“int”字段。
之所以这样做,是因为refModel()实际上在模型中创建了两个字段,其中一个用于编辑(_id),另一个用于列出数据(作为子查询)
使用refModel时,应使用“Model_Person”。 refModel,setModel和其他字段之间的一致性将在4.2中得到改进,由于兼容性原因,它没有完成。
SQL Generator本质上是不完整的,并且不完整,所以无论如何都要审查架构。例如,您可能有一些未在“模型”中定义的字段。此外,我更喜欢开发人员关注SQL,因为它可能无法精确地反映模型,一个模型可能通过连接使用多个表,或者模型可以继承每个表,然后在那里添加更多字段定义。
mandatory()是模型级需求,与其他验证的工作方式类似。虽然MySQL可以处理“强制”条件,但它无法处理其他条件。此外,您可以在继承模型时删除“强制”。
我将尝试添加有关在Agile Toolkit中有效使用模型的指南。