我在哪里可以在atk4中定义数据库/表名?

时间:2012-01-25 22:57:59

标签: atk4

在config.php中,我提出了类似的内容:

$config['dsn']='mysql://user:password@localhost/project';

我猜最后一个参数'project'定义了mysql中的数据库名称。所以我创建了一个名为'project'的数据库,在mysql中使用表名'product',并在我的模型中添加相同的名称

class Model_Product extends Model_Table {
    public $entity_code='product';
}

我在我的本地环境中测试没有任何问题。但是当我将文件上传到服务器时,它会返回错误,指出无法连接到表'project.Product'。 (唯一的区别是'产品'的第一个字母已被大写)。因此,代码似乎与模型名称“Product”一致,而不是模型代码中定义的表名。

我不知道为什么会这样,但我认为唯一的区别是mysql的版本(本地5.5和服务器端5.1)。除了升级服务器端mysql之外还有其他解决方案吗?否则,我必须手动将型号名称更改为class Model_product extends Model_Table并搜索&更换 无处不在setModel('Product')setModel('product')

2 个答案:

答案 0 :(得分:0)

您似乎使用的是setSource('Product')而不是setModel('Product')。

在添加模型之前,函数setSource已经在3.0版本的Agile Toolkit中。它允许网格直接与数据库一起操作。 setSource的第一个参数指定表名,因此“Product”用作表名。

在本地计算机上运行的是Windows,不区分大小写。即使您从“产品”中选择,它也会从“产品”中获取数据。但是,在您的服务器上,您使用的是Linux,并且从“产品”中选择无法找到具有此类名称的表。

这是因为MySQL正在使用文件来存储MyISAM的表。

您的修复是使用setModel(),并且在4.2严重重构时不要使用setSource。

答案 1 :(得分:0)

是的,你可以只使用MVCForm中的一些字段和setModel,你也可以添加提示之类的东西,它将是这样的:

 $g=$this->add('MVCForm');
    $g->setModel('Student',array('name','level','classroom'));
    $g->getElement('name')
    ->setFieldHint('Full name');