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
类型的查询必须扫描每一行,因为存储在列中的数据不能适当地索引,以便进行更具体的选择


最后,这可能取决于您的数据,因此我建议在您的特定环境中测试这两种方法,并查看它们在工作负载下的比较情况。

那么,当您说“位置”时,您是指表行吗?如果你用一个真实世界的例子来描述你的问题,你可能会更容易理解为什么和如何解决问题,也可能会提出其他更合适的解决方案。如果你喜欢就说。