HABTM найти, как отфильтровать результаты - PullRequest
0 голосов
/ 28 марта 2012

У меня есть отношение HABTM, где выходные данные, как показано ниже, я хотел бы сделать так, чтобы cakephp вернула «список» только с «friend.id» и «friend.company_name» и исключила «User». 1001 *

Я потратил довольно много времени на изучение того, как это сделать, и не могу заставить его работать.

Мой «метод поиска» в контроллере пользователей; я думаю, что мне нужно использовать сдерживаемое поведение, но я не уверен, что делать. Мне удалось получить результаты «друга», показать только 2 поля, но мне нужно избавиться от результатов «пользователя». Как мне это сделать?

Отношение определяется как в файле модели пользователя;

var $hasAndBelongsToMany = array(
'Friend' => array(
    'joinTable' => 'retailerrelationships',
    'className' => 'User',
    'foreignKey' => 'retailer_id',
    'associationForeignKey' => 'supplier_id'
)
    );

действие пользователя в контроллере пользователя:

$this->User->Behaviors->attach('Containable');

$users=$this->User->find('all',array('conditions'=>array('User.id'=>$this->Auth->user('id')),'contain'=>array('Friend.id','Friend.company_name')));         
        $this->set('users' ,$users); 

Вывод отладки

Array
(
    [0] => Array
        (
            [User] => Array
                (
                    [id] => 104
                    [username] => admin                    
                )

            [Friend] => Array
                (
                    [0] => Array
                        (
                            [id] => 107
                            [company_name] => carskitchens
                            [Retailerrelationship] => Array
                                (
                                    [id] => 12
                                    [retailer_id] => 104
                                    [supplier_id] => 107
                                    [created] => 2012-03-28 10:14:23
                                    [modified] => 2012-03-28 10:14:23
                                )

                        )

                    [1] => Array
                        (
                            [id] => 112
                            [company_name] => mr manufacturer
                            [Retailerrelationship] => Array
                                (
                                    [id] => 13
                                    [retailer_id] => 104
                                    [supplier_id] => 112
                                    [created] => 2012-03-28 11:26:52
                                    [modified] => 2012-03-28 11:26:52
                                )

                        )

                )

        )

)

1 Ответ

1 голос
/ 28 марта 2012

Вы должны взглянуть на Set класс.

Попробуйте это

Set::combine($results, '{n}.Friend.id', '{n}.Friend.company_name');
...