cakephp - 有许多通过不保存

Ale*_*lex 2 cakephp

我有以下有很多通过关系

Alert            AlertsElement       Search 
 id               id                  id 
 name             alert_id            link 
                  search_id
                  ordering
Run Code Online (Sandbox Code Playgroud)

这是我的模特

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');
Run Code Online (Sandbox Code Playgroud)

这是我用来保存的测试代码 -

$d = array();
$d['Alert']['id'] = 1976;
$d['Search']['id'] = 107;
$d['AlertsElement']['ordering'] = 2;
$this->Alert->create();
$this->Alert->saveAll($d);
Run Code Online (Sandbox Code Playgroud)

我收到此错误 -

Cannot use a scalar value as an array [CORE/cake/libs/model/model.php, line 1696]
Run Code Online (Sandbox Code Playgroud)

alertselement中包含订单但外键设置为0的行条目

有任何想法吗 ?

谢谢,亚历克斯

Dan*_*ght 9

为了保存hasMany关系saveAll,关联的hasMany模型数据(在本例中$d['AlertsElement'])需要是关联数组的索引数组,因此:

$d = array(
  'Alert' => array(
    'id' => 1976
  ),
  'AlertsElements' => array(
    0 => array(
      'ordering' => 2
    ) 
  )
);
$this->Alert->saveAll($d);
Run Code Online (Sandbox Code Playgroud)

请注意,由'ordering'键及其值组成的关联数组已向下移动到索引数组中.这是hasMany在单个saveAll操作中保存关联数据所需的格式,因为无论您是要保存一个还是十个关联记录,此格式都会正常扩展.

有关详细信息,请参阅Cake手册以了解保存相关模型数据.