Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Database 由于缺乏枚举支持,使用CakePHP的DB表太多_Database_Design Patterns_Cakephp - Fatal编程技术网

Database 由于缺乏枚举支持,使用CakePHP的DB表太多

Database 由于缺乏枚举支持,使用CakePHP的DB表太多,database,design-patterns,cakephp,Database,Design Patterns,Cakephp,我正在用CakePHP开发一个应用程序,我的数据库遇到了一些问题。 问题是我有一些表格有这样的列:性别男性/女性,kindimage,视频,文本,歌曲,链接 解决此问题的方法有很多: 正在创建列出性别、媒体类型等的链接表。。。但是我已经有很多表了,所以我不想过度消耗我的数据库。 为列选择了数据类型ENUM,但CakePHP不喜欢它。 使用1,2,3,。。。作为这些列的索引并在PHP中为每个列映射一个数组在我看来不是一个好主意,在哪里实例化这些aray?,很难知道数据库中某个项的实际值。。。。 为

我正在用CakePHP开发一个应用程序,我的数据库遇到了一些问题。 问题是我有一些表格有这样的列:性别男性/女性,kindimage,视频,文本,歌曲,链接

解决此问题的方法有很多:

正在创建列出性别、媒体类型等的链接表。。。但是我已经有很多表了,所以我不想过度消耗我的数据库。 为列选择了数据类型ENUM,但CakePHP不喜欢它。 使用1,2,3,。。。作为这些列的索引并在PHP中为每个列映射一个数组在我看来不是一个好主意,在哪里实例化这些aray?,很难知道数据库中某个项的实际值。。。。 为表中的每个项目使用列的真实、完整文本值,但它是多余的,因此会丢失内存。 就个人而言,我认为第四种可能性是最好的,但我想有其他的意见或想法来解决这个问题

提前谢谢

编辑:我正在考虑另一种解决方法。 如果我为每个列表创建一个表,我将有许多表,其中只有一些项,这对于数据库的维护是一个问题。 但如果我为前app_contants创建一个表,它有一个id、一个名称和一个类别,例如:“1”、“女性”、“用户性别”。所有需要列表项的表都将引用此表,如果我想要此表的特定列表,我只需制作$this->AppContants->find'list',array'conditions'=>array'category',user_sex'


你对此有何看法?

在我看来,3是最好的选择

在app_控制器中创建阵列,所有控制器都可以使用这些阵列

没错,数组需要放在app_helper中。您将需要它们向用户显示值并在表单中构建选择项,我想我有点累了


如果出于某些原因,您需要在模型或控制器中使用它们,请在app_模型和app_控制器中复制它们

在我看来,3是最好的选择

在app_控制器中创建阵列,所有控制器都可以使用这些阵列

没错,数组需要放在app_helper中。您将需要它们向用户显示值并在表单中构建选择项,我想我有点累了


如果出于某些原因,您需要在模型或控制器中使用它们,请在app_模型和app_控制器中复制它们

有很多解决方案:

例如,数组数据源

但我更喜欢使用类常量和表示枚举的静态方法:

几个月前,我甚至在烘焙模板中添加了Enum支持。
使它们开箱即用-反正没有人需要数据库枚举。

有很多解决方案:

例如,数组数据源

但我更喜欢使用类常量和表示枚举的静态方法:

几个月前,我甚至在烘焙模板中添加了Enum支持。
使它们开箱即用—反正没有人需要数据库枚举。

只需使用数组数据源—并使用find::list为表单构建值集。数组数据源提供的访问权限与数据库中的数据完全相同,包括关系和查询过滤


这也意味着您不需要依靠enum@mysql级别使您的应用程序可移植,并允许您访问阵列进行测试的数据源。我使用的另一个选项与上面链接的静态枚举技术非常相似。

只需使用数组datasource-and find::list为表单构建值集。数组数据源提供的访问权限与数据库中的数据完全相同,包括关系和查询过滤


这也意味着您不需要依靠enum@mysql级别使您的应用程序可移植,并允许您访问阵列进行测试的数据源。我使用的另一个选项与上面链接的静态枚举技术非常相似。

但是如果我在视图或模型中需要它,该怎么办?您如何看待使用Configure::write将数组放入core.php中;并使用::read?但是如果我在视图或模型中需要它怎么办呢?关于使用Configure::write将数组放入core.php中,您认为如何;并使用::read?谢谢,这正是我所需要的。请确保在2.0中使用App::import或App::uses将要从中访问枚举的模型包含在全局文件中,或者正好位于使用它的位置上方。嗨,Mark,我刚刚更新了我的问题,你觉得我找到的新解决方案怎么样?提前谢谢。嗯,这也是我正在用的东西。但您需要区分我的方法可以而且应该使用的、不会经常更改且可以硬编码的真实静态枚举,以及您可以并且应该将其存储在所描述的相关表中的那些更动态的属性。那么您想从后端/网站编辑它们吗?还是固定枚举
只有程序员自己会改变?这就是你应该问自己的问题,并据此采取行动。如果您不确定是否可以始终保留数据库中的所有内容,当然:这将花费您更多的join/DB调用。当然,这将花费我更多的join/DB调用,但将其与Apc缓存结合使用有时只会花费一些ms。当我需要与这些属性相关的数据时,我不需要进行连接,只需将id与PHP脚本中列表的索引相关联。我错了吗?因为我看到,当我调用另一个模型时,尽管它在缓存中,但每次都会花费我约10毫秒的时间…谢谢,这正是我所需要的。请确保在2.0中使用App::import或App::uses将要访问枚举的模型包含在全局文件中,或者正好位于使用它的位置上方。您好,我刚刚更新了我的问题,你觉得我找到的新解决方案怎么样?提前谢谢。嗯,这也是我正在用的东西。但您需要区分我的方法可以而且应该使用的、不会经常更改且可以硬编码的真实静态枚举,以及您可以并且应该将其存储在所描述的相关表中的那些更动态的属性。那么您想从后端/网站编辑它们吗?还是只有程序员自己会更改的固定枚举?这就是你应该问自己的问题,并据此采取行动。如果您不确定是否可以始终保留数据库中的所有内容,当然:这将花费您更多的join/DB调用。当然,这将花费我更多的join/DB调用,但将其与Apc缓存结合使用有时只会花费一些ms。当我需要与这些属性相关的数据时,我不需要进行连接,只需将id与PHP脚本中列表的索引相关联。我错了吗?因为我看到,当我调用另一个模型时,每次都会多花10毫秒,尽管它在缓存中。。。