cakePHP возвращает дубликаты записей - PullRequest
2 голосов
/ 02 ноября 2011

Почему-то CakePHP дает мне 2 копии одного результата. Может кто-нибудь сказать мне, почему и как это исправить? Сейчас это не так уж и сложно, но как только я получу несколько игровых групп для одного игрока, размер загружаемого файла увеличится.

Вот код модели:

        $this->recursive = -1;
        return $this->find('all', array(
            'order' => array(
                'PlaygroupActivity.timestamp DESC'
            ), 
            'limit' => $limit, 
            'joins' => array(
                array(
                    'table' => 'playgroup_players', 
                    'alias' => 'PlaygroupPlayers', 
                    'type' => 'inner', 
                    'foreignKey' => false, 
                    'conditions'=> array('PlaygroupPlayers.playgroup_id = Playgroup.id', 'PlaygroupPlayers.player_id'=>$id) 
                ),
                array(
                    'table' => 'playgroup_activities', 
                    'alias' => 'PlaygroupActivity', 
                    'type' => 'inner', 
                    'foreignKey' => false, 
                    'conditions'=> array('PlaygroupActivity.playgroup_id = Playgroup.id') 
                )
            ),
            'contain'=> array('PlaygroupActivity')
        ));

И результат:

{
   "data":[
      {
         "Playgroup":{
            "id":"3",
            "name":"South Florida Redemption",
            "email":null,
            "email_username":null,
            "email_password":null,
            "tag":null,
            "description":null,
            "avatar_url":null,
            "city":null,
            "state":null
         },
         "PlaygroupActivity":[
            {
               "id":"3",
               "text":"FINAL RESULTS OF THE FLORIDA STATE TOURNAMENT ",
               "timestamp":"2011-11-02 00:13:33",
               "playgroup_id":"3",
               "timeSince":"1320210813000"
            }
         ]
      },
      {
         "Playgroup":{
            "id":"2",
            "name":"Redemption Springfield",
            "email":null,
            "email_username":null,
            "email_password":null,
            "tag":null,
            "description":null,
            "avatar_url":null,
            "city":null,
            "state":null
         },
         "PlaygroupActivity":[
            {
               "id":"2",
               "text":"Due to bad weather, our Redemption meet today will be canceled.",
               "timestamp":"2011-02-01 14:16:21",
               "playgroup_id":"2",
               "timeSince":"1296591381000"
            },
            {
               "id":"1",
               "text":"Remember we have a meet Tuesday, February 1rst at the Greene County Library Station at 6:30pm.",
               "timestamp":"2011-01-28 23:01:57",
               "playgroup_id":"2",
               "timeSince":"1296277317000"
            }
         ]
      },
      {
         "Playgroup":{
            "id":"2",
            "name":"Redemption Springfield",
            "email":null,
            "email_username":null,
            "email_password":null,
            "tag":null,
            "description":null,
            "avatar_url":null,
            "city":null,
            "state":null
         },
         "PlaygroupActivity":[
            {
               "id":"2",
               "text":"Due to bad weather, our Redemption meet today will be canceled.",
               "timestamp":"2011-02-01 14:16:21",
               "playgroup_id":"2",
               "timeSince":"1296591381000"
            },
            {
               "id":"1",
               "text":"Remember we have a meet Tuesday, February 1rst at the Greene County Library Station at 6:30pm.",
               "timestamp":"2011-01-28 23:01:57",
               "playgroup_id":"2",
               "timeSince":"1296277317000"
            }
         ]
      }
   ],
   "status":200
}

Ответы [ 3 ]

5 голосов
/ 02 ноября 2011

При использовании объединений оператор GROUP BY sql работал лучше всего для удаления нескольких вхождений одних и тех же данных:

$this->find('all', array('group' => 'Playgroup.id', 'join' => etc....));
0 голосов
/ 24 мая 2013

Для меня не сработало добавление полей, но для нумерации страниц добавлено:

$this->paginate = array_merge_recursive($this->paginate, array('group' => '`Vehicle`.`id`'));//for duplicate removal
0 голосов
/ 02 ноября 2011

Введите ключ 'fields' для find (), перечислите все поля, необходимые для получения возвращаемого результата, включая 'DISTINCT Playgroup.id'

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