保存相关模型数据
Posted
技术标签:
【中文标题】保存相关模型数据【英文标题】:Save Related Model Data 【发布时间】:2013-05-22 13:57:07 【问题描述】:我无法理解如何在 Cakephp 1.3 中。我有一个名为 Policy 的模型和一个名为 Declinations 的模型。政策有许多拒绝。拒绝属于政策。我想要做的就是将 Policy_id 保存在 Declinations 表中名为 policy_id 的字段中。那么问题是如何从对应的模型中获取 Policy_Id 呢?是否需要先在 Declination 模型或控制器中设置 Policy_Id,然后将其传递给视图中的隐藏字段?
这是我的偏角模型
public $belongsTo = array(
'Policy' => array(
'className' => 'Policy',
'foreignKey' => 'policy_id'
我的策略模型如下
public $hasMany = array(
'Declination' => array(
'className' => 'Declination',
'foreignKey' => 'policy_id',
'dependent' => true
)
这是我的控制器
public function add($id = null)
if (!empty($this->data))
$this->Declination->create();
if ($this->Declination->saveAll($this->data['Declination']))
$this->Session->setFlash(__('Declinations saved.', true));
$this->redirect(array(
'controller' => 'coverages',
'action' => 'view',
$id
));
else
$this->Session->setFlash(__('Declinations failed to save.', true));
$reasons = $this->Declination->Reason->find('list');
$contactTypes = $this->Declination->ContactType->find('list');
$this->set(compact('id', 'reasons', 'contactTypes'));
这是我的看法
<?php echo $this->UiForm->input("Declination.$i.first_name"); ?>
<?php echo $this->UiForm->input("Declination.$i.last_name"); ?>
<?php echo $this->UiForm->input("Declination.$i.company"); ?>
<?php echo $this->UiForm->input("Declination.$i.contact_type_id"); ?>
<?php echo $this->UiForm->input("Declination.$i.phone_number"); ?>
<?php echo $this->UiForm->input("Declination.$i.reason_id"); ?>
<?php echo $this->UiForm->input("Declination.$i.other", array(
'label' => 'If other, please supply a reason'
)); ?>
<?php echo $this->UiForm->input("Declination.$i.dated", array(
'type' => 'text',
'readonly' => 'readonly',
'data-datepicker' => ''
)); ?>
任何意见将不胜感激!谢谢!
【问题讨论】:
【参考方案1】:不知何故,您必须知道要保存哪个策略 ID - 因此您可以将其添加为视图中的字段:
echo $this->UiForm->input("Declination.$i.policy_id", array('value'=>$policyId));
或者您可以在保存之前在 Controller 中进行设置:
$this->request->data['Declination']['policy_id'] = $policyId;
任何一种方式都行 - 使用对您的网站更有意义的方式。
获取策略 ID 的方式和位置也取决于您。您可以在控制器中使用find()
,然后使用set()
,以便在视图中访问它。或者,您可以使用find()
并在保存之前检索它。在不知道您在哪里可以获得哪些数据的情况下,很难提供比这更详细的信息。
【讨论】:
如果这回答了您的问题(无论您是否得出相同的结论),我建议将其标记为这样(复选标记),这样其他人就不会浪费时间来帮助您如果它已经解决了:) 是的,在我发布这个问题后不久,我将其添加到我的视图中......UiForm->input("Declination.$i.policy_id", array('type' => 'hidden', 'value' => '$policy_id')); ?>....现在我唯一要做的就是在我的控制器中调用 find 方法,然后将其发送到视图。唯一的事情是我不太确定如何执行它。现在,我在我的 Declinations 控制器中,我将如何访问父模型中的数据?我知道关联是用一种方式定义的。我将如何从另一个方向访问数据?我试过 $this->Declination->Policy 但它不起作用。 这是一个在整个 *** 以及通过 Google 发现的非常常见的问题。 我这样做是为了访问父模型。 $this->loadmodel('Policy')........$policy_id = $this->Policy->find('all');.......现在我所有的数据都在一个数组。以上是关于保存相关模型数据的主要内容,如果未能解决你的问题,请参考以下文章
禁止保存()以防止由于未保存的相关对象“postid”而导致数据丢失
Django REST框架:在ModelViewSet中保存相关模型