По какой-то причине 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 }
С использованием объединений оператор GROUP BY sql работал лучше всего для удаления нескольких вхождений одних и тех же данных:
$this->find('all', array('group' => 'Playgroup.id', 'join' => etc....));
Введите ключ «fields» для find (), перечислите все поля, которые должны быть возвращены, включая «DISTINCT Playgroup.id»,
Для меня не работали поля, добавляя, но для разбивки на страницы добавьте:
$this->paginate = array_merge_recursive($this->paginate, array('group' => '`Vehicle`.`id`'));//for duplicate removal