代码之家  ›  专栏  ›  技术社区  ›  Tim Falk

CakePHP使用3个带有saveAll的模型

  •  1
  • Tim Falk  · 技术社区  · 15 年前

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

    我有以下数据库结构:

    Clients hasMany Addresses
    Addresses belongsTo Client
    Addresses hasMany AddressEmails and AddressPhones
    

    如果我在客户机的add视图中使用以下代码执行此操作并在客户机控制器中调用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');
     ?>
    


    知道了:

    <?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 回复  |  直到 13 年前
        1
  •  3
  •   Nik Chankov    15 年前

    使用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);
    

    只是。这样所有相关的模型都将被保存(根据文档-请先看)。