gpt4 book ai didi

php - CakePHP 使用 3 个模型和 saveAll

转载 作者:行者123 更新时间:2023-12-04 06:48:52 25 4
gpt4 key购买 nike

我有以下情况:

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

我有以下数据库结构:

Clients hasMany Addresses
Addresses belongsTo Client
Addresses hasMany AddressEmails and AddressPhones

如果现在有人添加了新客户,则应保存他的主要地址以及 1 个电子邮件和 1 个电话号码。

如果我使用以下代码在客户端的添加 View 中执行此操作并在客户端 Controller 中调用 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');
?>

但我不知道如何通过此 View 保存电子邮件和电话号码。尝试认为像 AddressEmail.0.email 但这没有用。

知道了:

使用 Nik 发布的解决方案,它工作正常,我现在调用 $this->Client->Address->saveAll($this->data) 但不得不像这样调整我的添加 View :
<?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() 方法,因此不再需要零了!

最佳答案

Saving related data with saveAll() will only work for directly associated models.



所以基本上你可以使用 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);

只要。这样,所有相关模型都将被保存(根据文档 - 请参阅第一个)。

关于php - CakePHP 使用 3 个模型和 saveAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3412377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com