CakePHP和HABTM插入/保存不';行不通

CakePHP和HABTM插入/保存不';行不通,php,cakephp,has-and-belongs-to-many,Php,Cakephp,Has And Belongs To Many,我被困在Cakephp插件中,以下是我的 订购HABTM地址 -地址模式 以下是我在地址模型中的关联: public $hasAndBelongsToMany = array( 'Address' => array( 'className' => 'Address', 'joinTable' => 'address_customers', 'foreignKey' => 'customer_id',

我被困在Cakephp插件中,以下是我的

订购HABTM地址

-地址模式

以下是我在地址模型中的关联:

public $hasAndBelongsToMany = array(
    'Address' => array(
        'className' => 'Address',
        'joinTable' => 'address_customers',
        'foreignKey' => 'customer_id',
        'associationForeignKey' => 'address_id'  
    )
);
我想用一个新地址保存/插入一个新客户 因此,我认为下面的数组可以工作:

array(
'Customer' => array(
    'nom' => 'Khiami',
    'prenom' => 'TEST',
    'tel' => '0945454545',
    'ptel' => '',
    'commentaire' => '',
    'email' => '',
    'anniversaire' => array(
        'day' => '08',
        'month' => '12',
        'year' => '2012'
    ),
    'createdFrom' => 's'
),
'Address' => array(
    (int) 0 => array(
        'adresse' => 'ADDR TEST',
        'cp_id' => '1',
        'etage' => '',
        'residence' => '',
        'batiment' => '',
        'appartement' => '',
        'type' => 'l',
        'code_sonette' => '',
        'code_portail' => '',
        'code_batiment' => '',
        'code_asc' => ''
    )
)
)
唯一有效的方法是首先保存客户,然后使用以下数组:

array(
(int) 0 => array(
    'Customer' => array(
        'customer_id' => '394'
    ),
    'Address' => array(
        'adresse' => 'ADDR TEST',
        'cp_id' => '1',
        'etage' => '',
        'residence' => '',
        'batiment' => '',
        'appartement' => '',
        'type' => 'l',
        'code_sonette' => '',
        'code_portail' => '',
        'code_batiment' => '',
        'code_asc' => ''
    )
)
)

但是,我仍然没有填写关联表!它只在地址表中添加了一个条目。

由于您在HABTM关系中指定了jointable,我怀疑这是命名约定问题

您是保存在地址中还是保存在客户模型中?因为如果您是从地址模型调用它,我想应该已经有客户了,在这种情况下,您只需设置:

$this->request->data['Customer']['Customer'] = $customer_id; 

并保存地址数据,应在表中创建HABTM关联

是,您应该在以下两个方面指定它:

地址模型:

public $hasAndBelongsToMany = array(
   'Customer' => array(
       'className' => 'Customer',
       'joinTable' => 'address_customers',
       'foreignKey' => 'address_id',
       'associationForeignKey' => 'customer_id'  
));
客户模式:

 public $hasAndBelongsToMany = array(
   'Address' => array(
      'className' => 'Address',
      'joinTable' => 'address_customers',
      'foreignKey' => 'customer_id',
      'associationForeignKey' => 'address_id'  
));

您使用的是
save
还是
saveAll
?只是为了遵循cake的命名约定,不应该
'joinTable'=>'address\u customers'
'joinTable'=>'addresses\u customers'
?我尝试了save()和saveAll()。。。大部分时间都是saveAll(),因为我可以保存另一个地址。在这里,我必须同时创建一个客户和一个地址。所以我没有客户的身份证。但是在我问题的第二部分(“唯一起作用的东西[…])中,我尝试了这种方法。您可以先保存客户,然后使用:
$customerID=$this->Customer->getInsertID()
获取ID,然后像我说的那样保存地址。但是,我想应该有一种更简单的方法,您是否也在
客户
模型中指定了关系?是的,我这样做了,但它不起作用,并且关系在客户模型中(有疑问地编写)。应该在两个模型中指定关系。在你的问题中,你说它是在地址模型中。顺便说一句,不,关系是在客户模型中,因为客户HABTM地址。我必须在地址模型中添加关系吗?