2012-03-28 37 views
0

我是一个HABTM关系,其输出如下,我想要做的是cakephp返回一个“列表”只有“friend.id”和“friend.company_name”并排除“用户”。HABTM查找,如何过滤结果

我花了很长时间研究如何做到这一点,并不能得到它的工作。

我在用户控制器中的“搜索方法”我想我需要使用可容忍的行为,但我不知道该怎么做。我设法让“朋友”结果只显示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

你应该看看Set类。

试试这个

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

这对我没有工作:( – 2012-03-28 18:10:25

+0

你可以进入更详细的?首先,我用',而不是你'$ users'变量$ results'。此外,您还需要分配所以'$ options = Set :: combine ...'等等。你是否调试过输出来看看它给了你什么? – jeremyharris 2012-03-28 18:36:12

+0

其实你是对的我的不好我把我的发现改为“第一”,它的工作感谢 – 2012-03-28 18:36:56