gpt4 book ai didi

mysql - CakePHP 3.x - 保存这些表的关联数据和表单输入

转载 作者:行者123 更新时间:2023-11-29 19:28:25 25 4
gpt4 key购买 nike

我有 3 张 table :

  • 预订
  • 付款
  • session

在我的表单中,它是预订表的一部分,虽然我有几个专用于付款的属性(例如金额、已支付存款、状态),但只有一个具有表单输入 - 其他所有内容都与 session 相关:

echo $this->Form->hidden('payments.amount',['type'=>'number', 'value'=>'0', 'step'=>'0.01', 'class'=>'currency form-control']);

在 BookingsController 中,我有以下内容:

$booking = $this->Bookings->newEntity([
'associated' => ['Payments', 'Sessions']
]]);
if ($this->request->is('post')) {
$data = $this->request->data;
$booking = $this->Bookings->patchEntity($booking, $data, [
'associated' => ['Payments', 'Sessions']
]);
...

$save = $this->Bookings->save($booking);

...

单击表单上的“提交”后,预订和 session 中的数据都会被保存。在发布数据中,有两个数组:Session 数组和 Payments 数组。在 Booking 数组内的变量数据中,有一个 Associated 数组,其中包含两个元素:0 个付款、1 个 session 。

但是,在 SQL 日志中,没有 Insert Into for Payments 表。当对 $booking(patchEntity 一个)进行调试时,Payments 是一个空数组,如下所示:

'payments' => [],

我还对 patchEntity 之后的 $save 进行了调试,并获得了与“付款”相同的结果。

当涉及到非空值和验证时,我检查了我的 Payments 表模型和 MySQL 中的相应结构。

以下是有关验证的付款模型 (PaymentsTable):

public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmpty('id', 'create');

$validator
->allowEmpty('paymentmethod','create');

$validator
->decimal('amount')
->requirePresence('amount', 'create')
->notEmpty('amount');

$validator
->requirePresence('status', 'create')
->notEmpty('status');

$validator
->integer('depositpaid')
->allowEmpty('depositpaid', 'create');

$validator
->allowEmpty('uniqid', 'create');

return $validator;
}

在我的 MySQL 数据库中,我将属性“status”设置为在创建新数据条目时自动设置为“notpaid”,并将属性“amount”设置为默认值“0.00”。唯一不为空的字段是“id”、“booking_id”(链接到 Booking 表 id 的外键)、“amount”和“status”。

所以我想我的问题是:我没有保存此关联表的原因是因为我没有为付款属性的其余部分输入表单输入(隐藏或其他),还是有什么我遗漏的?

更新:

好吧,我在表单输入中添加了 0(付款.0.金额),这次提交没有成功。再次调试 patchEntity - 'debug($booking)' 时,我在付款数组中发现此错误:

'[errors]' => [
'status' => [
'_required' => 'This field is required'
]

即使我声明状态设置为自动放入默认字符串也是如此。我需要在 Controller 中执行类似 $this->request->data['status'] 的操作吗?如果是这样,它与非关联数据的属性有何不同(例如 $this->request->data['attribute'] 用于非关联数据)?

我已经尝试过:

$this->request->data['status'] = 'notpaid';
$this->request->data['payments']['status'] = 'notpaid';
$this->request->data['payments'][0]['status'] = 'notpaid';
$this->request->data['payments']['0']['status'] = 'notpaid';

一切都没有成功,并且在 patchEntity 调试中收到相同的错误。有效的方法是添加另一种形式的“状态”输入(表示它是必需的属性),但尽管我已经解决了我的问题,但我仍然想知道如何从 Controller 输入关联数据。

最佳答案

我通过添加另一个隐藏表单输入来修复它,尽管我仍然想知道如何通过 Controller 而不是 View 输入关联数据。

关于mysql - CakePHP 3.x - 保存这些表的关联数据和表单输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41978474/

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