post habtm postlover: как заказать посты по количеству постловеров? - PullRequest
0 голосов
/ 13 июля 2009

, пожалуйста, помогите мне, я действительно борюсь с этим ...

Авторы могут писать посты, а авторы могут любить посты других авторов ...

Так что посты принадлежат автору (когда авторы пишут их), но посты habtm авторы (когда авторы их любят).

Например, я хотел бы, чтобы сообщения сортировались по количеству авторов и создано за последние 24 часа. Вот мои модели и таблица присоединений:

ТАБЛИЦА: loveposts_postlovers id: INT lovepost_id: INT postlover_id: INT

ПОЧТА МОДЕЛЬ

<?php
class Post extends AppModel {
var $name = 'Post';
var $belongsTo = 'Author';

var $hasAndBelongsToMany = array(
        'Postlover' =>
            array(
                 'className'              => 'Author',
                 'joinTable'              => 'lovedposts_postlovers',
                 'foreignKey'             => 'lovedpost_id',
                'associationForeignKey'  => 'postlover_id',
                'unique'                 => true
            )
    );

var $displayField = 'title';

}

?>

АВТОРСКАЯ МОДЕЛЬ

<?php
class Author extends AppModel {
var $name = 'Author';
var $hasMany = 'Post';

var $hasAndBelongsToMany = array(
        'Lovedpost' =>
            array(
                 'className'              => 'Post',
                 'joinTable'              => 'lovedposts_postlovers',
                 'foreignKey'             => 'postlover_id',
                'associationForeignKey'  => 'lovedpost_id',
                'unique'                 => true
            )

    );

var $displayField = 'username';

}

?> 

Ответы [ 2 ]

0 голосов
/ 14 июля 2009

Я думаю, вы должны сделать шаг назад и попытаться прочитать документацию (book.cakephp.org). Попробуйте сделать демо, используя их примеры.

  • Таблица loveposts_postlovers очень запутанная, и, возможно, ее следует называть как-нибудь еще, например авторы_постов или даже избранное. ну, это может быть что угодно, если вы укажете это в 'joinTable'.
  • loveposts_postlovers должен иметь поля author_id, post_id

    // POST MODEL var $ hasAndBelongsToMany = array ( 'Автор' => массив ( 'className' => 'Author', 'joinTable' => 'lovelyposts_postlovers', 'foreignKey' => 'author_id', 'associationForeignKey' => 'post_id', 'уникальный' => правда ) );

Например, я хотел бы, чтобы сообщения, упорядоченные по количеству создателей, создавались за последние 24 часа. Вот мои модели и таблица присоединения:

$this->Post->LovedPosts->find('all', array('fields'=>array('Post.title', 'count(LovedPosts.*) as favorited'), 'group'=>'LovedPosts.post_id');

По сути, вы хотите выполнить запрос на выборку и сгруппировать по post_id, и этот код должен помочь вам в правильном направлении. Примечание. Я не тестировал этот код. Вам также понадобится условие заказа в этой операции поиска, но я оставлю это вам.

0 голосов
/ 13 июля 2009

Ваш лучший вариант - запросить на joinModel. Обычно это будет:

$this->Author->AuthorsLovedpost->find(...);

Но так как вы не придерживаетесь правил именования Cake для таблицы, они могут отличаться или не отличаться. Кстати, joinModel создается автоматически, но вы также можете явно указать его в объявлении HABTM.

var $hasAndBelongsToMany = array(
    'Postlover' => array(
         ...,
         'with' => 'joinModelName'
    )
);

Для параметров поиска вы можете делать все, что вам нужно, 'group' => 'post_id' и 'order' => 'COUNT(post_id)' или что-то в этом роде. То, что вы ищете, - это получить верный набор post_ids.

Так как с точки зрения joinModel обе модели - Author и Post - принадлежат к отношениям, Cake соответствующим образом найдет связанные результаты, и вы можете использовать обычные опции 'contain' и т. Д. Для фильтрации результатов.

Надеюсь, это поможет.

...