Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 红豆需要一个”吗;id";主键?_Php_Database_Orm_Redbean - Fatal编程技术网

Php 红豆需要一个”吗;id";主键?

Php 红豆需要一个”吗;id";主键?,php,database,orm,redbean,Php,Database,Orm,Redbean,如果使用ORM,是否需要将名为“id”的主键添加到数据库中的每个表中 在我的数据库中,有一些表的主键对由2或3个字段组成,或者主键的名称不是“id”(是的,我可以将名称更改为“id”,但它不能真正反映实际情况,因为它们不是id) 示例: 表1-商店职位: id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, title TEXT, content TEXT, 表2-

如果使用ORM,是否需要将名为“id”的主键添加到数据库中的每个表中

在我的数据库中,有一些表的主键对由2或3个字段组成,或者主键的名称不是“id”(是的,我可以将名称更改为“id”,但它不能真正反映实际情况,因为它们不是id)

示例:

表1-商店职位:

  id           INTEGER      PRIMARY KEY AUTOINCREMENT,
  name         TEXT,
  title        TEXT,
  content      TEXT,
表2-帖子的元数据存储:

  post         INTEGER      DEFAULT 0,     # <- references "id" from "posts"
  name         TEXT,
  value        TEXT,
  PRIMARY KEY(name, post),
  CONSTRAINT posts_meta FOREIGN KEY(post)
    REFERENCES posts(id) ON DELETE CASCADE ON UPDATE RESTRICT

post INTEGER默认值为0,#不幸的是,按照当前表结构的方式,您无法使用RedBean。每个表都需要有一个自动递增主键。这是一个轻微的下降,因为它使得集成到一个已经存在的产品更加困难

由于此限制,一些线程未能使用RedBean,作者Gabor De Mooij对此做出了回应:

但是,RedBean不要求主键字段仅命名为“id”。您可以使用
formatBeanID()
方法格式化主键列的名称,如下例所示,该方法有条件地将表名作为“id”的前缀。例如)表
users
的主键是
users\u id
。使用这种格式,您可以根据需要获得id名称的详细信息

希望这种限制在将来会被解除,因为它确实阻碍了与现有产品的集成

编辑:作为另一种ORM,我听说过很多学说:。我个人没有使用过它,但它似乎是许多使用PHP的人的标准

编辑2:感谢并感谢Jason提出了一种将RedBean集成到现有项目中的新方法,而您的数据库可能没有为此进行设置。我还想更新我的答案,以防人们仍然将其与这个问题联系起来。Gabor建议创建映射到表的视图,在表中可以设置视图,使其具有RedBean所需的适当结构。我没有亲自测试过这个,但它得到了一些用户的积极反馈。它在修改表时增加了一些额外的开销和维护,但似乎是迄今为止解决这个问题的最好和最完整的方法。
公认的答案并非完全正确。。。您可以使用现有的表结构,但需要在每个表的顶部实现一个视图,以便将PKEY列重命名为“id”。。。请参阅来自Gabor(RedbeanHP的创建者)的电子邮件:


据我所知,它必须有
id
作为主键。我在没有或有
table\u id
的表上试用过,但都不起作用。也许有一种方法可以自定义它,但我还没有尝试。RedBeanPHP 3.0更改日志:“…删除了Bean Formatter,您无法再自定义数据库模式(因为它会破坏一切)…我使用ReadBean v3.2,我应该怎么做?@Ostrovski如果您试图将RedBean集成到现有的项目/数据库中,您需要BeanFormatter提供的功能,我将实现RedBean 2.2.3。我不确定放弃BeanFormatter的理由。。。看起来RedBean正在向“新项目”领域迈进,在那里您可以手牵手地实现它和数据库。检查您是否能够实现2.2.3,或者如果您想/必须使用3.0+,请阅读一些关于重新实现这些类的内容,如本文所建议的:根据对他的建议的回应,这看起来是一个可行的解决方案。这实际上是我在评论中提到的同一个链接,看起来该线程一直处于活动状态,Gabor最近提出了这个潜在的解决方案。我将编辑我的答案,以确保访问此页面的任何人不会遇到旧的、过时的或不正确的建议。谢谢你的更新!您还可以使用exec()函数来执行任何您想要的操作。ID仅适用于bean,您仍然可以随意插入/更新。