我有一个产品型号和一个图像模型。他们有一个HABTM协会。 存在一些图像,但它们与产品无关。 现在,当我保存产品时,我想使用图像ID(我必须使用此数组)将其链接到一些未链接的图像。
这是我的代码:
class Image extends AppModel {
public $useTable = 'images';
var $hasAndBelongToMany = array(
'Product' => array(
'className' => 'Product',
'joinTable' => 'products_images',
'foreignKey' => 'id_image',
'associationForeignKey' => 'id_product'
)
);
}
class Product extends AppModel {
public $useTable = 'products';
var $hasAndBelongToMany = array(
'Image' => array(
'className' => 'Image',
'joinTable' => 'products_images',
'foreignKey' => 'id_product',
'associationForeignKey' => 'id_image'
)
);
}
class productsController extends AppController {
public $name = 'Products';
public $uses = array('Products', 'File');
public function add() {
if (!empty($this->data)) {
$this->Product->create();
if ($this->AnnuncioImmobiliare->save($this->request->data)) {
$idProduct = $this->Product->getLastInsertID();
$this->request->data['imagesIds'] = array("1", "2", "3");
if(isset($this->request->data['imagesIds'])){
foreach($this->request->data['imagesIds'] as $imageId){
$this->Image->id = $imageId;
$this->Image->save(array('Product'=>array('id'=>$idProduct)));
}
}
}
}
}
}
这不起作用。我哪里错了?
答案 0 :(得分:0)
1)您没有提供数据,因此我们无法以正确的格式验证数据。
2)你使用的是“save()”而不是“saveAll()”或“saveMany()”或“saveAssociated()”。只使用“save()”不会保存任何相关的模型数据。
答案 1 :(得分:0)
我自己找到了解决方案! 我观察了当使用为HABTM关联自动创建的输入传递数据时CakePHP如何处理$ this-> data->响应数组,我发现数组的格式应如下所示:
array(
'Product' => array(
'name' => 'myProduct',
'id' => ''
),
'Image' => array(
'Image'=>array(
0 => '1',
1 => '2',
2 => '3'
)
)
)
所以控制器的正确代码是
class productsController extends AppController {
public $name = 'Products';
public $uses = array('Products', 'File');
public function add() {
if (!empty($this->data)) {
$this->Product->create();
if (isset($this->request->data['imagesIds'])) {
$this->request->data['Image'] = array('Image' => $this->request->data['imagesIds']);
}
if ($this->AnnuncioImmobiliare->save($this->request->data)) {
/* success */
}
}
}
}
就是这样!我希望你觉得这很有用。