cakephp saveAll 不适用于关联
Posted
技术标签:
【中文标题】cakephp saveAll 不适用于关联【英文标题】:cakephp saveAll not working with associations 【发布时间】:2014-05-18 13:56:01 【问题描述】:这个问题可能是重复的。但我对一些问题和教程感到困惑。
我尝试使用以下代码保存数组。
$data = array(
'name' => 'ques 1',
'description' => 'lskjdf sldkfj sdlfkjsd flskdjf sldkfjsd',
'objective' => 'jd ldkjf sldkf sldfj sdlfjdlsfsjfl ds',
'Question' => array(
'type' => 'BOOLEAN',
'body' => 'slkdjfs dflskdf slkfjsiuwsdjkf sd',
'Answer' => array(
'body' => 'sd fsldkjfs dddd ddd ddd'
),
),
);
$this->Questionnaire->create();
$this->Questionnaire->saveAll($data);
运行此代码问卷后,保存了 3 个问题,但没有任何答案。只有一个问题具有身体价值。
这是我的模型课。
问卷.php
<?php
App::uses('AppModel', 'Model');
/**
* Questionnaire Model
*/
class Questionnaire extends AppModel
/**
* Validation rules
*
* @var array
*/
public $validate = array(
'name' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'Name is required'
)
),
'description' => array(
),
'objective' => array(
),
);
public $hasMany = array(
'Question' => array(
'className' => 'Question',
'foreignKey' => 'questionnairy_id'
),
);
问题.php
<?php
App::uses('AppModel', 'Model');
/**
* Question Model
*/
class Question extends AppModel
/**
* Validation rules
*
* @var array
*/
public $validate = array(
'type' => array(
'valid' => array(
'rule' => array('inList', array(
BOOLEAN_ANSWER,
SINGLE_ANSWER,
MULTIPLE_ANSWER,
)),
'message' => 'Invalide type',
)
),
'body' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'Question is required'
)
),
);
public $belongsTo = array(
'Questionnaire' => array(
'className' => 'Questionnaire',
'foreignKey' => 'questionnaire_id'
),
);
public $hasMany = array(
'Answer' => array(
'className' => 'Answer',
'foreignKey' => 'question_id'
),
);
答案.php
<?php
App::uses('AppModel', 'Model');
/**
* Answer Model
*/
class Answer extends AppModel
/**
* Validation rules
*
* @var array
*/
public $validate = array(
'body' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'Answer is required'
)
),
);
public $belongsTo = array(
'Question' => array(
'className' => 'Question',
'foreignKey' => 'question_id'
),
);
我需要知道保存这个数组的正确方法。请帮我。
【问题讨论】:
【参考方案1】:您需要正确格式化数组。 $data
数组应如下所示:
array(
'Questionnaire' => array(
'name' => 'Questionnaire 1'
),
'Question' => array(
array(
'type' => 'BOOLEAN',
'body' => 'Is Cake sweet?',
'Answer' => array(
array(
'body' => 'Yes.'
)
)
),
array(
'type' => 'BOOLEAN',
'body' => 'Does Cake make things easy and fast?',
'Answer' => array(
array(
'body' => 'Yes.'
)
)
),
)
);
请注意,问题位于索引数组中(与答案相同)。这是因为他们的关系是 hasMany。
表单看起来像这样:
$this->Form->create('Questionnaire');
$this->Form->input('Questionnaire.name');
$this->Form->input('Question.0.type');
$this->Form->input('Question.0.body');
$this->Form->input('Question.0.Answer.0.body');
$this->Form->input('Question.1.type');
$this->Form->input('Question.1.body');
$this->Form->input('Question.1.Answer.0.body');
$this->Form->end();
最后,你需要告诉 Cake 在保存时继续:
$this->Questionnaire->saveAll($data, array('deep' => true));
查看本书了解更多信息:
http://book.cakephp.org/2.0/en/models/saving-your-data.html
【讨论】:
感谢您的代码。我只需要数据数组。作为您的阵列,我可以保存问卷和问题。但它不能保存答案。有什么问题? 使用插件模型时,在 Controller::loadModel() 调用或 Controller::$uses 变量中引用像这样的 PluginName.ModelClass 模型。以上是关于cakephp saveAll 不适用于关联的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP如何在一个saveAll中不知道外键的情况下创建hasMany数据?