自动将其他记录添加到CakePhp中的HABTM表中

时间:2014-03-18 14:23:04

标签: cakephp transactions has-and-belongs-to-many

我对一个问题感到困惑。我会形容它 我第一次在cakephp中使用HABTM,我也不太熟悉cakephp 2.4.6

我有

     MediaOrg- model,     media_orgs - table name
     table fields- id,name
     public $hasAndBelongsToMany = array(
         'className' => 'ContactPerson',
         'joinTable' => 'contact_people_media_orgs',
         'foreignKey' => 'media_org_id',
         'associationForeignKey' => 'contact_person_id'
     );


     ContactPerson -model     contact_person- table name
     table_fields - id,name,designation,contact_number,ladline
     public $hasAndBelongsToMany = 'MediaOrg'


     ContactPeopleMediaOrg -model , table name-contat_people_media_orgs
     table_fields - contact_person_id ,media_org_id


            //now in controller saving values for media_org table
          $this->MediaOrg->save($this->request->data)
         $media_org_id=$this->MediaOrg->id;

      //next in controller saving values for contact_person table
          $this->ContactPerson->save($this->request->data)
         $mcontact_person_id=$this->ContactPerson->id;

 //next saving id's into many-to-many table
       $contact_person_mediaorg_table=array('contact_person_id'=>$contact_person_id,
               'media_org_id'=>$media_org_id );
 $this->ContactPeopleMediaOrg->save($contact_person_mediaorg_table);
一切都运转良好。我不知道普通表中发生了什么 contact_person_media_org,数据正在添加3个主题。 第一次添加正确的id和下一次每次添加联系人的手机号码和地号与media_org_id 当我使用getDataSource()调试它时,我可以发现一些param正在传递给该公共表并添加到它。我不知道它是怎么发生的

    (int) 6 => array('query' => 'INSERT INTO `go4ad`.`contact_people_media_orgs`                                                                    

     (`media_org_id`, `contact_person_id`) VALUES (?,?)',
        'params' => array(
            (int) 0 => '30',
            (int) 1 => '55555555'
        ),
        'affected' => (int) 0,
        'numRows' => (int) 0,
        'took' => (float) 1

我也可以找到一些BEGIN和COMMIT关键字。 实际上发生了什么......如果有人能帮助我..请帮助我。我坚持

1 个答案:

答案 0 :(得分:0)

您应该使用saveAssociated()。总的来说,您的流程应该生成如下内容:

$this->request->data = array(
    'MediaOrg' => array(
        'id' => $media_org_id,
    ),
    'ContactPerson' => array(
        0 => $first_person_id,
        1 => $second_person_id,
        2 => $thurd_person_id,
    ),
);
$this->MediaOrg->saveAssociated($this->request->data);

它会向您的HABTM关系表(media_organization_contact_persons)添加行。现在,当您已经将行添加到数据库中并且想要添加连接时,这可以正常工作。如果您想在同一时间向表中添加数据,或者此答案未涵盖的任何内容,您可以阅读this article