我有以下几种关系
Alert AlertsElement Search
id id id
name alert_id link
search_id
ordering
以下是我的模特
class Alert extends AppModel {
var $name = 'Alert';
var $hasMany = array('AlertsElement');
class AlertsElement extends AppModel {
var $name = 'AlertsElement';
var $belongsTo = array('Alert','Search');
class Search extends AppModel {
var $name = 'Search';
var $hasMany = array('AlertsElement');
这是我用来保存的测试代码 -
$d = array();
$d['Alert']['id'] = 1976;
$d['Search']['id'] = 107;
$d['AlertsElement']['ordering'] = 2;
$this->Alert->create();
$this->Alert->saveAll($d);
我收到此错误 -
Cannot use a scalar value as an array [CORE/cake/libs/model/model.php, line 1696]
和alertselement中包含订单但外键设置为0的行条目
有什么想法吗?
谢谢,Alex
答案 0 :(得分:9)
为了与hasMany
保存saveAll
关系,hasMany
相关联的模型数据(在本例中为$d['AlertsElement']
)需要是关联的索引数组数组,因此:
$d = array(
'Alert' => array(
'id' => 1976
),
'AlertsElements' => array(
0 => array(
'ordering' => 2
)
)
);
$this->Alert->saveAll($d);
请注意,由'ordering'
键及其值组成的关联数组已向下移动到索引数组中。这是在单个hasMany
操作中保存saveAll
关联数据所需的格式,因为无论您是要保存一个还是十个关联记录,此格式都会正常扩展。
有关详细信息,请参阅saving related model data上的蛋糕手册。
答案 1 :(得分:0)
我来到这里寻找this question的解决方案。不要与Daniel相矛盾,这本书说当你使用hasMany through关系(这是Alex正在使用的)时,你可以通过一次saveAll
调用来保存所有三个记录,但是你可以从加入表的模型中这样做:
$data = array(
[Student] => Array
(
[first_name] => Joe
[last_name] => Bloggs
)
[Course] => Array
(
[name] => Cake
)
[CourseMembership] => Array
(
[days_attended] => 5
[grade] => A
)
);
$this->CourseMembership->saveAll($data);
除非我误读了这本书,否则该示例应该创建学生,课程和加入CourseMembership记录。也就是说,我还没有能够像记录的那样让它工作。我正在传递课程的ID,因为我正在使用现有课程,但它不会创建学生或课程成员记录。
更多反馈表示赞赏。