Статистика

Участников проекта 105
Опубликовано статей 78
Отчет по карме. Топ 20

Новости блога

1 29.11.2013  Сегодня самым активным участникам newblog'а был выплачен доход с sape.
7 02.11.2012  Ура! Свешилось, нашему сайту дали тИЦ 10. Спасибо всем кто принимает участие в развитии нашего блога.
8 21.08.2012  Интеграция с sape.ru. Теперь каждый автор статей на newblog автоматически зарабатывает на рекламе.
Все новости

Топ 5 категорий

Программирование 46
Операционные системы 9
Базы данных 4
Туризм 2
Заметки 2

Последние 5 заметок (90)

gullyar - Закладки gullyar
gullyar - Ваша первая закладка
osadchaya - Закладки osadchaya
Ira0231188 - Закладки Ira0231188
Ira0231188 - Закладки Ira0231188

Ссылки

www.freedev.asia

Containable Behavior в cakephp или как отключить все ненужные связи оставив только самое необходимое

19.09.2011 21:07 | Просмотров: 998 | Доход: 34.68 руб. | Комментариев: 2
[Программирование] 
Рейтинг: 5/1

В cakephp есть удобная фича позволяющая отключить ненужные связи при запросе. К примеру есть у нас модель Country, она связана с моделью Region, та в свою очередь привязана к City, к Region привязано еще что-нибудь и т.д. В таком случае при выборке $this->Country->find('all'); Мы получим здоровенный массив того чего нам возможно и не нужно.И тут нам как раз пригодится:
$this->Country->Behaviors->attach('Containable');
 Если мы хотим подключить еще модель, то в contain можно указать массив моделей которые мы еще хотим видеть при выборке, например
$this->Country->contain('Region');
$this->Country->find('all');

В закрытой части описан пример испольования Containable в пагинаторе

А что самое удобное - этот способ можно использовать и в пагинаторе:
$this->Country->Behaviors->attach('Containable'); 
$params['contain']=array('Region'); 
$params['limit']=10;
$this->paginate=$params;
$result=$this->paginate('Country');
 

© developer
| Комментировать статью |
  • Аноним 0 (13.01.2012 12:23)
    Еще можно использовать настройки при подключении моделей через [\'contain\']  как в обычном find(\'all\') - это conditions, fields, order, group, limit и другие. При этом модели перечислить через запятую
    $this->paginate[\'contain\'] = array(\'Region\'=>array(\'order\'=>array(\'Region.population\'), \'fields\'=>array(\'Region.name\', \'Region.population\'),\'City\');
    
    Можно явно указывать подключение связанных моделей до 3х уровней вложенности, например так ...
    $this->paginate[\'contain\'] = array(\'Region.City.Street\'); // модели должны быть связаны соответсвенно
    
    Может кому пригодиться... Очень удобно использовать в больших запросах, которые обычно тянут кучу ненужной информации ))		
    | Ответить |
    • GM +2587 (13.01.2012 12:40)
      Добавлю в комментах вомзожность вставки кода :)
      | Ответить |