Как использовать модели без базы данных на CakePHP и иметь ассоциации?

У меня есть поле country_id в одной из моих моделей и вместо создания таблицы countries, которая содержит список стран, которые не меняются, какой лучший подход к этому?

Я думаю об использовании модели без таблицы базы данных, но я не знаю, как ее реализовать.

Пожалуйста, помогите. Спасибо заранее!

Ответ 1

Я бы предложил использовать ArraySource из поддерживаемого сообществом CakePHP плагин Datasources:

Загрузите весь плагин и извлеките содержимое в 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')
    );

}

Ответ 2

вы можете использовать синтаксис no table:

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

чтобы эта модель страны была без таблиц, но вам нужно высмеять источник данных (т.е. XML, YAML, PHP Array и т.д.) для данных стран.

Надеюсь, это поможет.

Ответ 3

В качестве альтернативы, если нет других данных, прикрепленных к стране, кроме, в основном, идентификатора какой страны она, вы, вероятно, можете держать ее в одной модели без ассоциации. Что-то вроде:

class MyModel extends AppModel {

    public static $countries = array(
        'Africa', 'America', ..., 'Zululand'
    );

    public $validate = array(
        'country' => array(
            'rule' => array('inList', self::$countries),
            ...
        )
    )

}