【问题标题】:How to use models without database on CakePHP and have associations?如何在 CakePHP 上使用没有数据库的模型并有关联?
【发布时间】:2011-08-03 09:50:10
【问题描述】:

我的一个模型中有 country_id 字段,而不是创建一个包含不变国家列表的 countries 表,最好的方法是什么?

我正在考虑使用没有数据库表的模型,但我不知道如何实现。

请帮忙。提前致谢!

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    你完全可以使用无表语法:

    class ModelWithoutTable extends AppModel
    {
        var $useTable = false;
    }
    

    要让这个 Country Model 无表,但您需要为国家数据模拟数据源(即 XML、YAML、PHP 数组等)。

    希望这会有所帮助。

    【讨论】:

    • 谢谢.. 像魅力一样工作。 :)
    【解决方案2】:

    我建议使用来自社区维护的 CakePHP 的ArraySource Datasources plugin

    下载整个插件并将内容提取到app/plugins/datasources

    app/config/database.php中定义与数据源的连接:

    public $array = array('datasource' => 'Datasources.array');
    

    这应该允许您通过在模型中定义记录来模拟表:

    class Country extends AppModel {
    
        public $useDbConfig = 'array';
    
        public $records = array(
            array('id' => 1, 'name' => 'Test record')
        );
    
    }
    

    【讨论】:

    • 除了存储库的readme file,唯一的其他文档位于几个数据源的文档块中(amazon|csv)。要查找每个数据源的配置选项,请查找 _baseConfig 或“config”实例。代码中的更多文档将是一个明确的改进。
    • 绝对是一个不错的方法。还不知道那个。会检查出来。直到现在我都这样做:dereuromark.de/2010/06/24/…
    【解决方案3】:

    作为替代方案,如果没有附加到国家/地区的其他数据,基本上,它是哪个国家/地区的 id,您可以将其保留在同一模型中而无需关联。大致如下:

    class MyModel extends AppModel {
    
        public static $countries = array(
            'Africa', 'America', ..., 'Zululand'
        );
    
        public $validate = array(
            'country' => array(
                'rule' => array('inList', self::$countries),
                ...
            )
        )
    
    }
    

    【讨论】:

    • 我从未去过“非洲”这个国家;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多