2012-03-28 76 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