在 HABTM 的情况下,CakePHP 不会保存正确的数据
Posted
技术标签:
【中文标题】在 HABTM 的情况下,CakePHP 不会保存正确的数据【英文标题】:CakePHP doesn't save correct data in case of an HABTM 【发布时间】:2014-02-19 14:17:56 【问题描述】:我正在尝试使用 HasAndBelongsToMany 关系保存一些数据。 这是我的桌子:
广告:
id (int) AI 名称(varchar)展厅:
id (int) AI 名称(varchar)commercials_showrooms:
id (int) AI commercial_id (int) showroom_id (int)还有我的模型:
class Showroom extends AppModel
public $hasAndBelongsToMany = array(
'Commercial',
);
class Commercial extends AppModel
public $hasAndBelongsToMany = array(
'Showroom'
);
我正在尝试以这种方式保存数据(目前是硬编码):
$this->loadModel('Showroom');
$this->Showroom->saveAll(array(
'Showroom' => array(
'id' => 1
),
'Commercial' => array(
'name' => 'test'
)
));
saveAll() 返回 (bool)true,但是,数据库中没有保存任何内容。 我该如何解决这个问题?
【问题讨论】:
尝试保存array(array( 'Showroom' => array( 'id' => 1 ), 'Commercial' => array( 'name' => 'test' ) ))
。另外,你的蛋糕版本是什么?并且:您是否收到验证错误(您是否尝试在保存前进行验证)?
我试过了,这不起作用。我正在使用 Cakephp 2.4.1 我要保存的模型没有验证。
您测试它的方式也不正确。
你能说得更准确些吗?
【参考方案1】:
您是否阅读了"Saving Related Model Data (HABTM)" in the CakePHP book 上的部分?
它建议的格式与您用于数据的格式不同。
【讨论】:
我看不出有什么不同。 不同之处在于额外的环绕数组,就像我说的你应该尝试的那样。但是你说那也没用。它至少给你带来了不同的错误吗? @dynamic_cast:不要只使用您看到的第一个示例 - 请阅读“您还可以使用此格式保存多个记录及其与 saveAll() 的 HABTM 关联...”的部分 正如@Nunser 所说,它也不起作用。而且问题根本没有改变,数据库没有任何改变。【参考方案2】:要测试您的表是否正常工作,请在您的控制器中尝试:
$this->loadModel('CommercialsShowroom');
$CommercialsShowroom = array('CommercialsShowroom'=>array(
'commercial_id'=>your_value,
'showroom_id'=>your_value));
$this->CommercialsShowroom->create();
if ($this->CommercialsShowroom->save($CommercialsShowroom, false))
var_dump('It is saved');
对于模型配置,请阅读 Dave 链接了解更多信息
//CommercialsShowroom model:
var $belongsTo = array(
'Commercial' => array(
'className' => 'Commercial',
'foreignKey' => 'commercial_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Showroom' => array(
'className' => 'Showroom',
'foreignKey' => 'showroom_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
//Showroom model:
var $hasAndBelongsToMany = array(
'Commercial' => array(
'className' => 'Commercial',
'joinTable' => 'commercials_showrooms',
'foreignKey' => 'commercial_id',
'associationForeignKey' => 'showroom_id',
'unique' => true,
)
);
//Commercial model:
var $hasAndBelongsToMany = array(
'Showroom' => array(
'className' => 'Showroom',
'joinTable' => 'commercials_showrooms',
'foreignKey' => 'showroom_id',
'associationForeignKey' => 'commercial_id',
'unique' => true,
)
);
【讨论】:
以上是关于在 HABTM 的情况下,CakePHP 不会保存正确的数据的主要内容,如果未能解决你的问题,请参考以下文章