1

我有 2 个模型 Booking 和 Attendee 具有多对多关系

我还有一个 BookingAttendee 枢轴模型 - 所以我可以利用这些具有的 afterCreate 方法。

在我想添加与会者的预订的后端表单中 - 我正在使用部分来呈现关系<?= $this->relationRender('attendees') ?>并且一切正常。

预订有一些价格属性,我想在每次添加或删除与会者时在页面上更新这些属性。

在创建关系后,是否有任何关于关系小部件的方法可以让我更新页面上的 div?

根据文档,我可以使用这 4 种方法来扩展 RelationController

relationExtendViewWidget()
relationExtendManageWidget()
relationExtendPivotWidget()
relationExtendRefreshResults()

问题是我不知道如何使用这些来更新页面上的内容。

4

1 回答 1

0

您必须将具有唯一 ID 的 div 添加到您的关系渲染中。例如:

<div id="delegates-relation">
    <?= $this->relationRender('delegates') ?>
</div>

然后在您的控制器中,您必须添加该relationExtendRefreshResults($field)方法并使用上面定义的 id 从关系渲染中返回您的新 html。

/**
 * Update fields after a relation has changed
 *
 * @param $field the relation field that has changed.
 * @return array|null
 */
public function relationExtendRefreshResults($field):? array
{
    if ($field !== 'yourField') { // here you can check which field was updated.
        return null;
    }

    return [
        '#delegates-relation'=> $this->relationRender('delegates'),
    ];
}
于 2019-03-14T17:33:35.833 回答