Блок условий в методе afterFind

Как можно реализовать разное поведение метода afterFind в зависимости от определенного условия.

Например, при выводе ленты материалов мне не нужны некоторые данные из других таблиц, которые получаются в методе afterFind, а на странице самого материала — нужны.

Другими словами, мне нужно в методе afterFind создать блок условий. Только не соображу, за что цепляться в условии.

Как правильно это можно реализовать?

Сейчас получение данных выглядит так: ModelClass::model()->findAll($criteria);

Я пытался задавать значения атрибутов класса до вызова метода findAll(), но метод findAll() создает на каждую найденную запись новый экземпляр объекта, соответственно, значение атрибута теряется.
  • Вопрос задан
  • 3923 просмотра
Решения вопроса 1
@LDZ Автор вопроса
Сделал через геттер.

Например, если мне нужно свойство foo, я создал метод getFoo() и вынес в него получение данных, которые должны быть доступны в свойстве foo.

Теперь в методе afterFind нет сбора ненужных в ленте материалов данных
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@tnz
Что-то вы не то делаете, мне кажется. Если в каком-то случае не нужны данные из связанных таблиц — не выбирайте их. Не? А когда надо, вынесите в скоуп и в нужном контроллере перед выборкой подключайте скоуп этот.
Ответ написан
@yujin1st
Веб-разработчик (Yii)
можно обращаться к методу hasRelated(), и в случае если загружены какие-то связные данные, то и обрабатывать их
Ответ написан
Комментировать
maxkh
@maxkh
Web developer
Попробуйте в ModelClass::model() - передать сценарий, на основании сценария можно будет сообразить условие. А так же выносите все в отдельные методы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы