Кто знает простой способ перечислить в safeAttributes все поля таблицы кроме 1-2. Объясняю зачем. Есть таблица из 50 полей. Примерно 1-2 поля из неё не безопасны. Мне кажеться глупо перечислять 48 полей в safeAttributes темболее если в будущем поля в базе могут быть переименованы. Может есть красивый вариант как через $this в моделе достать все поля в таблице?
Правильно ли, что БД меняется, поля переименовываются, а в ПО изменения не заносятся? ![]()
Всех мучений - выполнить строчку и вставить в программу. Напр., для MySQL:
SELECT CONCAT("return array('", GROUP_CONCAT(column_name SEPARATOR "', '"), "');")
FROM information_schema.columns
WHERE table_schema=SCHEMA()
AND table_name=...
AND column_name NOT IN (...)
Выполнять же подобное при каждом запросе не рекомендую.
Можно попробовать так:
public function safeAttributes() {
return array_keys($this->tableSchema->columns);
}
Понятно, что в safeAttributes попадут все “колумны” таблицы, но убрать пару-тройку лишних путём нехитрых операций нетрудно ![]()
to RXL
Спасибо за ответ, но это не вариант.
Yii наверняка при инициализации и работе с моделью где то держит перечень полей с базы. Поэтому наверняка есть более красивый способ чем делать запрос в сэйватрибутес к базе ![]()
Про изменение полей я тоже наверно ляпнул т.к. такого врядли будет, но перечислять 40-50 полей - явно не красивый подход. должно же быть что то получше.
to andy_s
оо, вот это уже весьма интересно. спасибо, завтра попробую ![]()
Zolter [Ozzy], я имел в виду не выполнять в скрипте, а выполнить руками и вставить статичную строку в программу. Конечно, хозяин — барин, но мне видится такой подход некошерным, когда программа ничего не знает о структуре БД. Добавят в БД поля, которые тоже надо добавить в safe, да позабудут о программе. Однообразность полезна — сложнее забыть.
Аа. ну да, тоже вариант ![]()