Отношение CakePHP - HABTM и поиск () - PullRequest
0 голосов
/ 09 января 2012

это моя ситуация, у меня есть модель Post, которая может принадлежать нескольким категориям. Это я понял, как это сделать:

class Post extends AppModel
{
    var $hasAndBelongsToMany = array('Category');
}

И модель Категория:

class Category extends AppModel
{
    var $hasAndBelongsToMany = array ('Post');
}

Теперь, все это прекрасно работает и все такое. Но я просто не могу понять, как искать сообщения, относящиеся к определенной категории, например, «Новости» с идентификатором 1 для использования в:

class CategoriesController extends AppController {
    function view ($id = 0) {
        // doesnt work
        $this->Category->Video->find ('all', array('conditions' => array('category_id' => $id));
    }
}

Я пытался найти ответ в Google и CookBook, но пока ничего не нашел. Кто-нибудь знает, как этого можно достичь?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 09 января 2012

Вы выполняете поиск по модели "Видео", когда вы показали связь с моделями категории и поста, а не с видео.Предполагая, что это ошибка опечатки:

Если вы хотите искать, как вы заявили, посты, относящиеся к категории "Новости", делают в posts_controller.php:

$this->Post->Category->find('all', array('conditions'=>array('Category.name'=>'News')) );

Или вконтроллере категорий..php

$this->Category->find('all', array('conditions'=>array('Category.name'=>'News')) );
0 голосов
/ 09 января 2012

Самым простым вариантом было бы поискать саму категорию и разрешить уровню рекурсивный также возвращать связанные сообщения (или видео, или что вы делаете):

//in the category controller
$this->Category->find('all', array('conditions'=>array('Category.id'=>$id));

Существует много вариантов поиска по данным HABTM, но приведенное выше является самым простым.

Вот страница в книге CakePHP, которая описывает различные способы запроса по отношению к HABTM:

http://book.cakephp.org/1.3/view/1044/hasAndBelongsToMany-HABTM

0 голосов
/ 09 января 2012

Вы можете сделать следующее, что должно работать:

$this->Category->bindModel(array(
        'hasOne' => array(
            'CategoriesVideo'
        ),
    ));
    return $this->Video->find('all', array(
        'conditions' => array(
            'CategoriesVideo.category_id' => $id,
            ),
        ),
    ));

РЕДАКТИРОВАТЬ: Извините, смотрел на неправильный код. Это должно работать.

...