HABTM find, как фильтровать результаты

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

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

Мой «метод поиска» в пользовательском контроллере; я думаю, что мне нужно использовать сдерживаемое поведение, но я не уверен, что делать. Мне удалось получить результаты «друга», которые показывают только 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
                                )

                        )

                )

        )

)

person fuzzy dunlop    schedule 28.03.2012    source источник


Ответы (1)


Вам следует взглянуть на класс Set.

Попробуй это

Set::combine($results, '{n}.Friend.id', '{n}.Friend.company_name');
person jeremyharris    schedule 28.03.2012
comment
Можно подробнее? Во-первых, я использовал $results вместо вашей переменной $users. Кроме того, вам нужно назначить его так $options = Set::combine... и т. д. Вы отлаживали вывод, чтобы увидеть, что он вам дал? - person jeremyharris; 28.03.2012
comment
на самом деле вы были правы, плохо, я изменил свою находку на первую, и она работает, спасибо - person fuzzy dunlop; 28.03.2012