cakephp paginate несколько habtm - PullRequest
1 голос
/ 15 марта 2010

у меня есть несколько habtm, как эти:

// Пользовательская модель
var $ hasMany = array ('Post');

// Пост модель
var $ hasAndBelongsToMany = array ('Category', 'Tag');

// Категория модели
var $ hasAndBelongsToMany = array ('Post');

// Метка модели
var $ hasAndBelongsToMany = array ('Post');

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

$this->paginate = array
(
    'Post' => array
    (
        'limit' => 2,

        'fields' => array(
            'Post.title', 'Post.content', 'Post.slug', 'Post.created',
            'Tag.name',
            'User.username', 'User.created', 'User.post_count', 'User.avatar_file_name'),

        'joins' => array
        (
            array(
                'table' => 'categories_posts',
                'alias' => 'CategoriesPost',
                'type' => 'inner',
                'conditions'=> array('CategoriesPost.post_id = Post.id')
            ),

            // FETCH USER
            array(
                'table' => 'users',
                'alias' => 'User',
                'type' => 'inner',
                'conditions'=> array('Post.user_id = User.id')
            ),

            // FETCH TAGS
            array(
                'table' => 'posts_tags',
                'alias' => 'PostsTag',
                'type' => 'inner',
                'conditions'=> array('PostsTag.post_id = Post.id')
            ),

            array(
                'table' => 'tags',
                'alias' => 'Tag',
                'type' => 'inner',
                'conditions'=> array('Tag.id = PostsTag.tag_id')
            ),

            array(
                'table' => 'categories',
                'alias' => 'Category',
                'type' => 'inner',
                'conditions'=> array('Category.id = CategoriesPost.category_id', 'Category.slug' => $slug)
            )
        )
    )
);

$posts = $this->paginate();

Кто-нибудь может дать мне решение, так как я новичок? большое спасибо ...

1 Ответ

1 голос
/ 16 марта 2010

Я столкнулся с подобной проблемой, когда пытался разбить на страницы набор результатов, используя связанную модель. В итоге мне пришлось вручную связать мои модели, выполнить запрос, а затем открепить их, чтобы Cake содержал правильные данные вместе. (http://book.cakephp.org/view/86/Creating-and-Destroying-Associations-on-the-Fly)

Вы также можете попробовать сдерживаемое поведение, которое позволит вам указать, какие модели вы хотите включить в набор результатов. Контейнер является ядром в 1.2+ (http://book.cakephp.org/view/474/Containable), в противном случае вам нужно будет взять его самостоятельно.

Я не совсем уверен, почему у вас там такой гигантский запрос. Я был бы более склонен сделать что-то похожее на следующее.

$this->Model->recursive = 2;
$this->Model->paginate();

И пусть Кейк получит все связанные данные для меня через мои ассоциации. Затем я бы скорректировал возврат, используя массив условий (http://api.cakephp.org/class/controller#method-Controllerpaginate), чтобы указать категорию.

Извините, это не решение по умолчанию, но я сам CakePHP-любитель! Возможно, вам будет проще просматривать запросы, результаты и т. Д., Используя DebugKit, http://github.com/cakephp/debug_kit

...