2013-07-05 5 views
0

У меня есть три модели, связанные друг с другом в приложении CakePHP. У меня есть Article, который принадлежит как Category, так и Author. Я запрашиваю для последних статей категории как это:Создание ассоциаций CakePHP умнее

$category = $this->Category->find('first', array(
    'conditions' => array(
     'Category.slug' => $slug 
    ), 
    'contain' => array(
     'Article' => array(
      'Author' 
     ) 
    ) 
)); 

Однако, я заметил, что это очень неэффективная, так как для каждой записи Article находит он запрашивает мою таблицу authors базы данных, даже если я уже извлекли данные конкретного автора. Поэтому, если я приведу 10 статей, и все они принадлежат одному автору, CakePHP все равно выдаст 10 отдельныхSELECT операторов.

Могу ли я сделать CakePHP «умнее» при использовании Контейнерного поведения, чтобы он выдавал только необходимые запросы? В моем случае выведите первый оператор SELECT, чтобы найти автора, а затем используйте этот результат в последующих Article строках, если ID совпадает.

+2

Jep: Используйте LINKABLE Поведение или соединение cusotm. – mark

ответ

0

Есть несколько способов сделать это через API торта - простейший будет либо установить рекурсивный атрибут с моделью $ либо -1 или 0, или использовать отвязать функция с моделью()

Смежные вопросы