CakePHP 和 HABTM 插入/保存不起作用
Posted
技术标签:
【中文标题】CakePHP 和 HABTM 插入/保存不起作用【英文标题】:CakePHP and HABTM insert/save doesn't work 【发布时间】:2012-12-08 13:06:01 【问题描述】:我卡在 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' => ''
)
)
)
但是,我仍然没有填写关联表!它只在地址表中添加一个条目。
【问题讨论】:
您使用的是save
还是saveAll
??
只是为了遵循蛋糕的命名约定,'joinTable' => 'address_customers'
不应该是'joinTable' => 'addresses_customers'
吗?
我尝试使用 save() 和 saveAll() ...大部分时间 saveAll() 因为我可以保存另一个地址。
【参考方案1】:
是的,您应该在两者中都指定它:
地址模型:
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'
));
【讨论】:
【参考方案2】:由于您在 HABTM 关系中指定了可连接点,我怀疑它是命名约定问题。
您是保存在 Address 还是 Customer 模型中?因为如果你从地址模型中调用它,我想应该已经有一个客户,在这种情况下你只需要设置:
$this->request->data['Customer']['Customer'] = $customer_id;
并保存地址数据,它应该在表中创建HABTM关联。
【讨论】:
这件事,我必须同时创建一个客户和一个地址。所以我没有客户的身份证。但是在我的问题的第二部分(“唯一有效的东西 [...]”)我尝试过这种方式。 你可以先保存客户而不是使用:$customerID = $this->Customer->getInsertID();
来获取 ID,然后像我说的那样保存地址。但我猜应该有一个更简单的方法,你是否也在Customer
模型中指定了关系?
是的,我做了什么,但它不起作用,并且关系在客户模型内部(有问题)
应该在两个模型中指定关系。在您的问题中,您说它在地址模型中。
否,关系在客户模型上,因为客户 HABTM 地址。我必须在地址模型中添加关系吗?以上是关于CakePHP 和 HABTM 插入/保存不起作用的主要内容,如果未能解决你的问题,请参考以下文章