如何管理 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']);
}

另见