Решил вот воспользоваться запросами CActiveRecord типа save().
Но далеко не все понятно. Что если у меня в модели указано имя таблицы к примеру xxx, а мне нужно выбрать записи из таблицы yyy. Обе таблицы это как бы один модуль. Получается нужно создавать еще одну модель для таблицы? В критериях я параметра не нашел, чтобы можно было указать нужную таблицу. Пока вижу единственный вариант самому писать запрос в модели, но это гораздо дольше получается…
Еще не совсем понял про метод relations(). Как он связывает таблицы, это тоже получается нужно создавать несколько моделей? Или можно в одной модели нашлепать классов и там прописать таблицы, но мне кажется это может в кашу превратится в итоге.
Просто очень не привычно для меня такая запись, мне как-то проще и нагляднее писать запросы самому. Особенно если многотабличные запросы.
Для каждой таблицы БД (ну или почти для каждой) необходимо создавать отдельный класс Active Record.
Метод relations() не связывает таблицы (связи на уровне БД может вообще не быть), а лишь упрощает выборку данных. Например, если в классе User есть связь "posts" (с классом Post), то все сообщения юзера можно получить очень просто: $user->posts.
Думаю, стоит еще раз прочитать Guide и Blog Tutorial.
Да, но на самом деле связать таблицы на уровне БД тоже не помешает, т.к.:
добавляется автоматическая поддержка целостности на уровне БД;
генератор моделей Yii по существующим связям сам вставит нужный код в relations().
Да, сохранять связанную информацию придется вручную. Но в вашем случае, скорее всего, этого и не потребуется, ведь типы товаров добавляются отдельно, а товары отдельно? Чуть сложнее будет код контроллера, если можно добавить товар и сразу же несколько новых типов.
Намного лучше и удобнее (уж извините, что не аргументирую, но “за” действительно очень много ). Писать SQL возможно придется только в двух случаях: 1) архисложный запрос с кучей вложенных select’ов или операторами, специфичными для конкретной СУБД, 2) оптимизация (это вовсе не значит, что приложение станет работать заметно быстрее, если всё писать на “чистом” SQL).