RedBean是否需要“id”主键?
如果你使用ORM,你需要在数据库的每个表中添加一个名为“id”的主键吗?RedBean是否需要“id”主键?
在我的数据库我有几个表有主键对2或3字段,或主键与其他名称比“ID”(是的,我可以更改名称为“ID”,但它wouldn'吨真的反映现实,因为他们都没有标识)
例子:
表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
RedBean会使用这种db结构吗?
不幸的是,您的当前表结构如何,您无法使用RedBean。每个表都需要一个自动增量主键。略微下降,因为它使融入已经存在的产品变得更加困难。
几个线程未能利用红豆由于这个约束,从作者的响应,的Gabor德Mooij:
http://groups.google.com/group/redbeanorm/browse_thread/thread/6d5582275326744f?pli=1
http://groups.google.com/group/redbeanorm/browse_thread/thread/4fa7b29b453dcdb8
红豆不需要主键字段然而,仅仅被命名为“id”。您可以使用formatBeanID()
方法将主键列的名称格式化为您的喜好,如下面的示例所示,它将表名称有条件地添加到“id”中。例如)表users
将主键为users_id
。使用该格式,您可以根据需要获取详细的id名称。
http://redbeanphp.com/community/wiki/index.php/Prefixes
希望这个约束将在未来被取消,因为它确实妨碍集成到现有的产品。
编辑:作为一种替代ORM,我听说过很好的教义:http://www.doctrine-project.org/。我没有亲自使用它,但它似乎是许多使用PHP的标准。
编辑2:感谢和信贷杰森是带给关注的新方法集成到红豆在您的数据库可能未设置为它现有的项目。我想更新我的答案,以防人们仍然参考这个问题。 Gabor建议制作映射到表格的视图,您可以在视图中设置视图以获得RedBean所需的适当结构。我没有亲自测试过这个,但它得到了一些用户的正面反馈。它在改变表格时增加了一些额外的开销和维护,但似乎是迄今为止这个问题的最佳和最完整的答案。 http://www.redbeanphp.com/faq#beanformatter
RedBeanPHP 3.0更改日志:“...删除\t Bean格式化程序,您可以不需要定制数据库模式(因为它打破了一切)......”我使用ReadBean v3.2,我应该怎么做? – 2012-09-12 11:17:52
@Ostrovski如果您试图将RedBean集成到已经存在的项目/数据库中,并且您需要由BeanFormatter提供的功能,那么我会实现RedBean 2.2.3。我不确定推出BeanFormatter的理由是什么......看起来RedBean正在向“新项目”领域迈进,在那里你可以实现它和数据库的携手。请检查您是否能够实现2.2.3,或者如果您想/必须使用3.0+,请阅读本文中建议的可能重新实现这些类的内容:https://groups.google.com/论坛/?fromgroups =#!topic/redbeanorm/wXUeT4Tj2uU – king14nyr 2012-09-12 19:07:23
接受的答案是并不完全正确。你可以使用现有的表结构 - 但你需要实现每个让你重新命名PKEY栏是'表的顶部的VIEW ID'...看到的Gabor这封电子邮件 - RedBeanPHP的创造者:
https://groups.google.com/forum/#!searchin/redbeanorm/view/redbeanorm/wXUeT4Tj2uU/3AngnmVwZdYJ
据我所知它必须有'id'作为主键。我已经在没有或使用'table_id'的表上试过了,它不起作用。可能有一种方法来定制它的工作,但我没有尝试过。 – 2012-03-04 16:44:43