YiiFramework Как сэкономить на выборке из ДБ...

Vano

Новичок
Как сэкономить на выборке из ДБ при использовании dropDownList'a и rules. О чем речь:
Представим, есть форма создания страны, у страны есть тип политической системы(демократия, диктатура...)
Правила модели Country:
Код:
public function rules()
    {
        return [
            ['country_type', 'in', 'range' => ArrayHelper::getColumn(CountryTypes::find()->all(), 'id')],
        ];
    }
Форма создания:
Код:
<?= $form->field($model, 'rent_type')->dropDownList(ArrayHelper::map(CountryTypes::find()->all(), 'id', 'name') ?>
Получается 2 запроса. Кто-нибудь решал эту задачу?
 

Adelf

Administrator
Команда форума
два запроса к табличке по 5 строчек? не переживай. все будет хорошо.

З.Ы. вместо правило достаточно foreign ключа. видеть странную ошибку будут только хакиры.
 

Vano

Новичок
Есть идея такая:
Модель для создания страны:
Код:
...
private $_settings;

public function getCountriesList()
{
    if (!empty($this->_settings['countriesList']) return $this->_settings['countriesList'];
    $countries = CountryType::find()->asArray()->all();
    return $this->_settings['countriesList'] = ArrayHelper::map($countries, 'id', 'name');
}
...
rules:
Код:
public function rules()
    {
        return [
            ['country_type', 'in', 'range' => array_keys($this->countriesList)],
        ];
    }
view:
Код:
<?= $form->field($model, 'rent_type')->dropDownList($model->countriesList) ?>
 

Vano

Новичок
Есть идея такая:...
Но в таком случае, будут повторы кода, в frontend и backend. Можна в common запихнуть, но! когда хочется нестандартный лист добавить, допустим добавить в список нестандартный option "Все" где value=0 или "не важно", то не получается красиво или легко изменить это свойство.
 

Vano

Новичок
З.Ы. вместо правило достаточно foreign ключа. видеть странную ошибку будут только хакиры.
Агаа, и такое есть?, кстате думал щас поискать, после написания вопроса, а оказывается можна?) подаскажи плз как
 

Adelf

Administrator
Команда форума
если у тебя mysql и тип таблиц myisam - то там не получится. innodb поддерживает. гугли. не будь как беспомощный ребенок. пишешь в гугл имя своей базы данных.. и add foreign key. и все прекрасно найдется. с примерами.
 

Adelf

Administrator
Команда форума
запись так и так не создастся. отличаться будет может только текст ошибки
 

Vano

Новичок
Ага, ошибку увидит? так и до взлома недалеко, оно выдаст офигенную ошибку, если попробывать сохранить такое. Как ты можеш такое советовать?)
 

Adelf

Administrator
Команда форума
Если у тебя норм система, то увидит лишь - ошибка базы данных. типа того. и увидит это лишь тот, кто захочет специально левое значение скормить.
 

Vano

Новичок
Ну кароче, это не чистый код, это побег от обязательств, я не знаю как еще назвать.
 

Vano

Новичок
А вторая идея, и помойму самая проста - сделать в коммоне создать статические функции и добавить кэширование.
 
Сверху