safeAttributes

Кто знает простой способ перечислить в 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

оо, вот это уже весьма интересно. спасибо, завтра попробую :)

собственно, теоретическое обоснование тут :D

http://www.yiiframew…leSchema-detail

Zolter [Ozzy], я имел в виду не выполнять в скрипте, а выполнить руками и вставить статичную строку в программу. Конечно, хозяин — барин, но мне видится такой подход некошерным, когда программа ничего не знает о структуре БД. Добавят в БД поля, которые тоже надо добавить в safe, да позабудут о программе. Однообразность полезна — сложнее забыть.

Аа. ну да, тоже вариант :)