CakePHP代码生成不适用于没有主键的表[新手]

CakePHP代码生成不适用于没有主键的表[新手],php,mysql,cakephp,Php,Mysql,Cakephp,问题的条件 我有一个简单的cakephp项目,效果很好。我想再添加两个页面,显示下表中的数据: 第一个表包含主键 第二个表包含外键 为了创建这两个页面,我使用代码生成:/cake bake all table\u name 问题 当我为第一个表运行此命令时,它工作正常,但当我为第二个表运行脚本时,它不会生成视图(我的意思是*.ctp文件)。错误如下: 错误:无法为没有主键的模型生成视图 我试图在src/template/second_table/index.ctp中创建index.ctp,但

问题的条件

我有一个简单的cakephp项目,效果很好。我想再添加两个页面,显示下表中的数据:

第一个表包含主键

第二个表包含外键

为了创建这两个页面,我使用代码生成:
/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