如何管理 hasMany 从表单中出现的空关系? (CakePHP 3.x)
How to manage hasMany relations which come up as empty from form? (CakePHP 3.x)
我在数据库中有 tables。场地,场地协调员。地点可能有多个协调员。我有一个表格来保存场地及其协调员。但有时必须在没有协调员信息的情况下保存场地。然而,当我这样做时,cakephp 会警告我:"Coordinator cannot be empty"。因为是的,协调员不能。但是如果协调器输入都是空的,我想忽略 table-side / event-side.
例如,我试图通过在 Table 对象上使用 beforeMarshal() 来删除它。没用。
public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
{
if ($data['full_name'] == '' && $data['phone_number'] == '') {
unset($data);
}
}
我想做:
当我用协调员输入填写场地表格时,它会正确保存。
当我在没有协调员输入的情况下填写场地表格时。它可以在没有协调器的情况下正确保存场地。因为不需要协调器。
unset()
调用根本不会影响数据,这不是 PHP 的工作方式,所有这一切只是在 beforeMarshal()
方法的局部范围内取消设置变量。
您必须从父 table 中取消设置实际关联 property/key,即 VenuesTable::beforeMarshal()
。大致如下:
if (isset($data['venue_coordinators']) &&
is_array($data['venue_coordinators']) &&
count($data['venue_coordinators']) === 1 &&
(!isset($data['venue_coordinators'][0]['full_name']) ||
$data['venue_coordinators'][0]['full_name'] === '') &&
(!isset($data['venue_coordinators'][0]['phone_number']) ||
$data['venue_coordinators'][0]['phone_number'] === '')
) {
unset($data['venue_coordinators']);
}
另见
我在数据库中有 tables。场地,场地协调员。地点可能有多个协调员。我有一个表格来保存场地及其协调员。但有时必须在没有协调员信息的情况下保存场地。然而,当我这样做时,cakephp 会警告我:"Coordinator cannot be empty"。因为是的,协调员不能。但是如果协调器输入都是空的,我想忽略 table-side / event-side.
例如,我试图通过在 Table 对象上使用 beforeMarshal() 来删除它。没用。
public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
{
if ($data['full_name'] == '' && $data['phone_number'] == '') {
unset($data);
}
}
我想做:
当我用协调员输入填写场地表格时,它会正确保存。 当我在没有协调员输入的情况下填写场地表格时。它可以在没有协调器的情况下正确保存场地。因为不需要协调器。
unset()
调用根本不会影响数据,这不是 PHP 的工作方式,所有这一切只是在 beforeMarshal()
方法的局部范围内取消设置变量。
您必须从父 table 中取消设置实际关联 property/key,即 VenuesTable::beforeMarshal()
。大致如下:
if (isset($data['venue_coordinators']) &&
is_array($data['venue_coordinators']) &&
count($data['venue_coordinators']) === 1 &&
(!isset($data['venue_coordinators'][0]['full_name']) ||
$data['venue_coordinators'][0]['full_name'] === '') &&
(!isset($data['venue_coordinators'][0]['phone_number']) ||
$data['venue_coordinators'][0]['phone_number'] === '')
) {
unset($data['venue_coordinators']);
}
另见