HABTM ค้นหา วิธีกรองผลลัพธ์

ฉันมีความสัมพันธ์ 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 var ของคุณ นอกจากนี้ คุณต้องกำหนดมันให้เป็น $options = Set::combine... ฯลฯ คุณได้แก้ไขจุดบกพร่องเอาต์พุตเพื่อดูว่ามันให้อะไรกับคุณบ้าง? - person jeremyharris; 28.03.2012
comment
จริงๆ แล้วคุณพูดถูก ฉันแย่ ฉันเปลี่ยนการค้นหาเป็นอันดับแรก และมันก็ใช้งานได้ดี ขอบคุณ - person fuzzy dunlop; 28.03.2012