1

Temat: Paginate i order

Chcę zrobić paginację w categoriach (lista wpisów z danej kategorii), ale wywala mi błąd gdy wpisuję w order date_posted (w tabeli categories go nie ma, za to jest w tabeli advertisments) - zatem ustawiając paginate tak jak poniżej

var $paginate = array('limit' => 3, 'order' => array('Advertisment.date_posted' => 'desc'));

otrzymuję taki błąd

SQL Error: 1054: Unknown column 'Advertisment.date_posted' in 'order clause'

jak zatem odnieść się do pola date_posted w innej tabeli (tj. advertisments).

Pozdrawiam.

2

Odp: Paginate i order

a masz zdefiniowane relacje? Wrzuć więcej kodu, przede wszystkim model.

3

Odp: Paginate i order

<?php
class Category extends AppModel {
    var $name = 'Category';
    var $displayField = 'name';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

        function getDataByCategory($categoryName) {
            return $this->find('all', array('conditions' => array('Category.name' => $categoryName)));
        }

    var $hasMany = array(
        'Advertisment' => array(
            'className' => 'Advertisment',
            'foreignKey' => 'category_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

}
?>
<?php
class Advertisment extends AppModel {
    var $name = 'Advertisment';
    var $displayField = 'title';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

        function getAdvertisments() {
            return $this->find('all');
        }

    var $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Category' => array(
            'className' => 'Category',
            'foreignKey' => 'category_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );
}
?>

Odp: Paginate i order

Witam,

wydaje mi się, że nie da się tego załatwić od tak. Przypadek ten zadziałałby w drugą stronę, tj. paginacja Advertisment z sortowaniem po dowolnym polu Category.
Zauważ, że każdy obiekt Advertisment jednoznacznie wskazuje na obiekt Category, ale w drugą stronę nie, dlatego system ma problem z dopasowaniem obiektu (z posted_date) spośród wielu.

Nasuwa mi się pomysł z pokombinowaniem z drugim parametrem funkcji paginate lub nadpisaniem tej funkcji. Pytanie, czy gra warta świeczki.

Pozdrawiam

Marek Rodkiewicz - http://newrails.pl

5

Odp: Paginate i order

Dzis juz z bardzo czasu nie mam, ale wydaje mi sie ze

-  bedziesz wyswietlac  liste reklam z wczesniej wybranej (pojedynczej) kategorii - wtedy zaczynasz od modelu Advetisement , nie musisz nawet bindowac kategorii bo i po co , skoro  wczesniej mozesz pobrac  o niej info(znajacjej id) - wtedy bedzie dzialac takjak podales w 1-szym poscie ( tylko inny model paginujesz)

lub

- jednak chesz wyswietlac  na jednej stronie, liste kategorii i liste remklam  w nich , rozwiazanie troche leciwe (ale nie jestes google i nie masz milionow reklam w tysicach kategorii): utworz widok zawierajacy pola obu tabel,  ktore beda wyswietlone/uzywane dosortowania  , zrob do niego model, i  paginuj ten model

Ostatnio edytowany przez rob_zombie (2010-08-07 04:21:11)

6

Odp: Paginate i order

W cakePHP 1.1 rozwiązaywałem takie coś przez custom pagination
http://book.cakephp.org/view/249/Custom … Pagination nie wiem jak się sprawa ma w 1.2 ale podejrzewam, że to powinno działać bez problemu. Dodatkowo mógłbyś rzucić okiem na generpwane zapytanie SQLa (przy włączonym debug,2)

może by coś podpowiedziało.

http://newrails.pl - hosting zorientowany na frameworki