Cakephp paginate отображает несколько записей - PullRequest
0 голосов
/ 20 января 2011

Это мое первое программирование с CakePHP.Я использую cakePHP 1.3.3.Я столкнулся с этой проблемой, что я не могу понять, в чем проблема.Моя функция выглядит следующим образом:

function view_members(){
  $data = $this->paginate('User',array('User.level <=' => '10'));
  print_r($data);
}

В начале моего контроллера paginate установлен на:

var $paginate = array(
'limit' => 20,
'order' => array('User.id' => 'asc'),
'User' => array(
  'fields' => array('User.id','User.level','User.name','User.status'),
  'recursive' => 0
 )
);

В моей модели пользователь настроен следующим образом:

    class User extends AppModel {
    var $name = 'User';
    var $hasOne = array(
        'Users_detail' => array(
            'className' => 'Users_detail',
            'dependent' => true,
        ),
        'Users_calendar' => array(
            'className' => 'Users_calendar',
            'dependent' => true,
        ),
    );
    var $hasMany = array(
        'Users_transaction' => array(
            'className' => 'Users_transaction',
            'order' => 'Users_transaction.id ASC', 
            'dependent' => true,
        ),
        'Users_notice' => array(
            'className' => 'Users_notice',
            'order' => 'Users_notice.id DESC',
            'dependent' => true,
        ),
    );
}

Моя проблема в том, что когда я получаю доступ к этой функции, я получаю несколько экземпляров одной записи.

Это массив, который я получаю:

Array
(
    [0] => Array
        (
            [User] => Array
                (
                    [id] => 3
                    [level] => 5
                    [name] => Matthew
                    [status] => 1
                )

        )

    [1] => Array
        (
            [User] => Array
                (
                    [id] => 3
                    [level] => 5
                    [name] => Matthew
                    [status] => 1
                )

        )

    [2] => Array
        (
            [User] => Array
                (
                    [id] => 3
                    [level] => 5
                    [name] => Matthew
                    [status] => 1
                )

        )

    [3] => Array
        (
            [User] => Array
                (
                    [id] => 3
                    [level] => 5
                    [name] => Matthew
                    [status] => 1
                )

        )

    [4] => Array
        (
            [User] => Array
                (
                    [id] => 4
                    [level] => 5
                    [name] => Larry
                    [status] => 1
                )

        )

    [5] => Array
        (
            [User] => Array
                (
                    [id] => 5
                    [level] => 5
                    [name] => Brian
                    [status] => 1
                )

        )
);

В этом примереМэтью появляется в массиве 4 раза, хотя в базе данных MySQL всего 1 запись.Я пытался выяснить, почему он это делает, но до сих пор я не добился успеха.Кто-нибудь испытывал это раньше?

1 Ответ

0 голосов
/ 21 февраля 2011

Не зная, как работает SQL Cake, довольно сложно найти точный ответ на этот вопрос, но я думаю, что он как-то связан с данными, существующими в связанных таблицах. Имеет ли пользователь Мэтью связанные строки в одной из таблиц, связанных с таблицей User?

Вы используете recursive = 0, но это может не сработать так, как вы ожидаете (на самом деле он объединяется с другими моделями, с которыми имеет отношение belongsTo). Если вы не хотите объединений с другими таблицами, используйте recursive = -1. См. документацию для рекурсивного в руководстве Cake, чтобы увидеть, как он работает.

...