1

我目前正在构建一个简单的产品管理,它使用状态来跟踪产品状态生命周期。我最近添加了一个名为“handles”的新表,它只是product_idhandle(简单的文本输入)。为简单起见:

在此处输入图像描述

我创建了一个 hook.php 文件,该文件已经加载并可以工作。

$filter = function (Payload $payload) {
  $container = Application::getInstance()->getContainer();

  $itemsService = new ItemsService($container);
  $item = $itemsService->find('products', $payload->get('id'), ['fields' => 'status,handles.*']);

  $statuss = ['detailed'];
  if (in_array($item['data']['status'], $statuss) || in_array($payload->get('status'), $statuss)) {
    if ((!$item['data']['handles'] || !count($item['data']['handles']))) {
      throw new UnprocessableEntityException('Can not publish product without handle!');
    }

  return $payload;
}

只要更新的顺序是这样的,它就可以完美地工作:

  1. 新建product状态为“草稿”
  2. 添加新handle产品并保存产品
  3. 将状态切换为“详细”

这有效,因为现在我确实有一个“句柄”并且我的代码有效(count()不为零,所以上面的检查不会抛出UnprocessableEntityException)。

但是如果我的步骤是这样的:

  1. 创建新product的状态为“详细”(没有任何handle

我不知道如何编写我的钩子,所以我可以检查使用时未保存的关系字段item.create.products:before。任何提示我如何在将关系字段保存到数据库时检查它?

提前致谢!欢迎任何帮助!

4

0 回答 0