CakePHP虚拟HABTM表/关系,类似fixture
首先,我想告诉你们,你们是很棒的观众 我正在制作一个应用程序,其中我有模型CakePHP虚拟HABTM表/关系,类似fixture,cakephp,cakephp-2.0,has-and-belongs-to-many,Cakephp,Cakephp 2.0,Has And Belongs To Many,首先,我想告诉你们,你们是很棒的观众 我正在制作一个应用程序,其中我有模型Foo和表Foos。我想给Foo另一个参数,HABTM参数,比如说Bar。但我不想为条创建表。因为Bar一开始会有5个位置,5年后可能会增长到7个位置,或者根本没有。因此,我认为没有必要创建另一个表,并让CakePHP使用另一个SELECT来查看该表。有人认为这可以实现吗 我认为一个解决方案是为条表制作一个固定装置,并且只为real添加条(Bars\u Foos表)(无论如何都不会太大)。但是我找不到在普通控制器中使用测试
Foo
和表Foos
。我想给Foo另一个参数,HABTM参数,比如说Bar
。但我不想为条创建表。因为Bar
一开始会有5个位置,5年后可能会增长到7个位置,或者根本没有。因此,我认为没有必要创建另一个表,并让CakePHP使用另一个SELECT来查看该表。有人认为这可以实现吗
我认为一个解决方案是为条
表制作一个固定装置,并且只为real添加条(Bars\u Foos
表)(无论如何都不会太大)。但是我找不到在普通控制器中使用测试夹具的方法
第二种解决方案是在Foo
一个字段中保存一个JSON或序列化数组,并将逻辑移到模型中,但我不知道这是否是最好的解决方案。类似虚拟场的东西
现实生活中的例子:
所以我喜欢自行车。每个自行车
都有它的主类型
。现在是{“MTB”、“公路”、“徒步旅行”、“城市”、“下坡”}
。我知道在很长一段时间内,这个名单不会增长太多。几年内可能会有2到5个职位。但它将相对较短
(对于那些说可能有上百种专用自行车类型的人,我有另一个参数列专用自行车类型
)
它需要是一个HABTM关系,但main_types
表将非常小,因此我希望避免创建它,并找到一种更简单的解决方案
因为
- MySQL的数据量如此之小,这让它很烦恼
- 它使MySQL查询复杂化
- 我必须为
MainType
- 当我不需要大部分数据并且希望使用
recursive
- 在这里插入您想要的任何内容
从你的现实生活例子来看,我认为你走错了方向。查询不会很复杂,CakePHP对HABTM关系使用额外的查询,这将只是一个额外的查询,成本不应该很高,而且使用。如果您真的只需要使用
递归
(无论出于何种原因),那么它只是一个需要解除绑定的附加模型,对我来说这似乎并不过分
这可能不是你想听到的,但我真的认为一个合适的数据库解决方案比试图入侵“虚拟数据”要好。还要注意,测试中使用的fixture只定义在运行测试时动态写入数据库的数据,因此这肯定比使用数据库中已经存在的数据成本更高
在使用附加列存储数据时,对于不查询主类型的选择,您可能会获得一个小的性能提升,但您肯定会失去RDBMS提供的所有灵活性,包括使用适当索引的更快选择,通过更新单个相关值影响多条记录,等等。对我来说,这听起来不是一个好的权衡。想想看,当这些信息以字符串形式存储在单个列中时,您将如何选择所有下坡
跟踪
自行车?你可能会使用丑陋的像选择
等等,MySQL中有一个可以容纳多个值的帽子。对,而且看起来更简单,也不那么复杂。是的,但在后台不是这样,虽然使用复杂的联接查询可以非常快地使用适当的索引,但是SET
类型的查询必须扫描每一行,因为存储在列中的数据不能适当地索引,以便进行更具体的选择
最后,这可能取决于您的数据,因此我建议在您的特定环境中测试这两种方法,并查看它们在工作负载下的比较情况。那么,当您说“位置”时,您是指表行吗?如果你用一个真实世界的例子来描述你的问题,你可能会更容易理解为什么和如何解决问题,也可能会提出其他更合适的解决方案。如果你喜欢就说。