CakePHP代码生成不适用于没有主键的表[新手]
问题的条件 我有一个简单的cakephp项目,效果很好。我想再添加两个页面,显示下表中的数据: 第一个表包含主键 第二个表包含外键 为了创建这两个页面,我使用代码生成:CakePHP代码生成不适用于没有主键的表[新手],php,mysql,cakephp,Php,Mysql,Cakephp,问题的条件 我有一个简单的cakephp项目,效果很好。我想再添加两个页面,显示下表中的数据: 第一个表包含主键 第二个表包含外键 为了创建这两个页面,我使用代码生成:/cake bake all table\u name 问题 当我为第一个表运行此命令时,它工作正常,但当我为第二个表运行脚本时,它不会生成视图(我的意思是*.ctp文件)。错误如下: 错误:无法为没有主键的模型生成视图 我试图在src/template/second_table/index.ctp中创建index.ctp,但
/cake bake all table\u name
问题
当我为第一个表运行此命令时,它工作正常,但当我为第二个表运行脚本时,它不会生成视图(我的意思是*.ctp文件)。错误如下:
错误:无法为没有主键的模型生成视图
我试图在src/template/second_table/index.ctp中创建index.ctp,但cakephp返回以下错误:
找不到与分页兼容的对象
我该怎么纠正呢?我可以手动创建视图吗?我认为您在正确创建表方面仍然存在问题。并且您的第二个表似乎没有主键: 只需遵循cakephp约定,如下所示: 名称表
create table names (
id int not null auto_increment primary key,
first_name varchar(255),
last_name varchar(255)
)
详细信息表:
create table details (
id int not null auto_increment primary key,
name_id int,
email varchar(255),
address varchar(255)
)
现在转到您的项目目录路径和bin内(我的E:\xampp\htdocs\blogs\bin>):
完全按照()操作,这会使事情变得更简单。烘焙不会提示您输入表关系吗?此外,约定是,如果第一个表名为
names
,第二个表名为details
,那么details中的外键将为name\u id
。然后它会自动工作。正如您所说,我更改了第二个表中的列名,但错误是相同的,它没有指向表之间的任何关系:错误:无法为没有主键的模型生成视图您遵守了约定吗?我想是的,但也许我错过了什么。我试着做到以下几点:1。创建表创建表名(id int not null auto_increment主键,email varchar(255))代码>2。创建详细信息表创建表详细信息(name_id int不为null,address varchar(255))代码>3。添加外键:alter table details Add constraint fk_details外键(name_id)在更新级联上的删除级联上引用名称(id)代码>4<代码>/蛋糕烘焙所有名称
5/cake bake all details
->相同的错误我有一段时间没有使用bake
,但我想它会询问是否有相关的表,您会选择details
。也许其他人会来。是的,你是对的,问题是关于惯例。我照你说的做了,一切都很好。非常感谢你!但我还需要澄清一件事:当带有外键的表包含多个单词(例如details\u info)时,我如何访问此页面?如果我尝试使用像localhost/cakephp/detailsinfo这样的url,它会返回找不到与paginate兼容的对象。欢迎使用!如果您正在检索分页数据,您需要在url中提供页面。例如localhost/cakephp/detailsinfo/1。如果您关注一些函数,例如视图(由cake bake生成),您可以很好地理解这一点。
1.cake bake all names
2.cake bake all details