CakePHP使用saveAll的3个模型

时间:2010-08-05 06:53:29

标签: php cakephp cakephp-appmodel

我有以下情况:

我正在开发一个地址应用程序来存储客户的详细信息。

我有以下db-structure:

Clients hasMany Addresses
Addresses belongsTo Client
Addresses hasMany AddressEmails and AddressPhones

如果有人现在添加新客户,则应保存他的主要地址,包含1封电子邮件和1个电子邮件。

如果我在客户端的add-view中使用以下代码执行此操作,并且在客户端控制器中调用saveAll方法,则部分非常有用:

 <?php
  echo $this->Form->input('client_group_id');
  echo $this->Form->input('company');
  echo $this->Form->input('firstname');
  echo $this->Form->input('lastname');
  echo $this->Form->input('www');
  echo $this->Form->input('Address.0.is_standard', array('type' => 'hidden', 'value' => '1'));
  echo $this->Form->input('Address.0.street');
  echo $this->Form->input('Address.0.zip');
  echo $this->Form->input('Address.0.city');
 ?>

但我不知道如何在此视图中保存电子邮件和电话号码。尝试像AddressEmail.0.email一样思考但是没有用。


知道了:

使用Nik发布的解决方案,它工作正常,我现在称为$ this-&gt;客户端 - &gt;地址 - &gt; saveAll($ this-&gt;数据),但必须调整我的添加视图,如下所示:< / p>

<?php
    echo $this->Form->input('client_group_id');
    echo $this->Form->input('company');
    echo $this->Form->input('firstname');
    echo $this->Form->input('lastname');
    echo $this->Form->input('www');
    echo $this->Form->input('Address.is_standard', array('type' => 'hidden', 'value' => '1'));
    echo $this->Form->input('Address.street');
    echo $this->Form->input('Address.zip');
    echo $this->Form->input('Address.city');
    echo $this->Form->input('AddressEmail.0.type', array('type' => 'hidden', 'value' => 'Standard'));
    echo $this->Form->input('AddressEmail.0.email');
    echo $this->Form->input('AddressPhone.0.type', array('type' => 'hidden', 'value' => 'Standard'));
    echo $this->Form->input('AddressPhone.0.number');
?>

由于我现在正在调用地址模型中的saveAll()方法,因此不再需要零了!

1 个答案:

答案 0 :(得分:2)

  

使用saveAll()保存相关数据仅适用于直接关联的模型。

所以基本上你可以使用saveAll()客户端(作为主要模型)和地址进行保存。您可以通过从Adress模型中保存来实现的电子邮件和电话:

$this->Client->saveAll($data); //This saves Client and Address
$this->Client->Address->saveAll($data); //This saves Email and Phone

我没有测试它,但它应该以这种方式工作。 (假设您的字段遵循命名约定,如:

echo $this->Form->input('Email.0.field');
echo $this->Form->input('Email.1.field');
echo $this->Form->input('Email.2.field');
echo $this->Form->input('Phone.0.number');
echo $this->Form->input('Phone.1.number');
echo $this->Form->input('Phone.2.number');

我不确定它是否会直接“抓住”地址ID,但你可以试试。

另一种方法是从

保存模型
$this->Client-Address->saveAll($data);

只。这样就可以保存所有相关模型(根据文档 - 首先看一下)。