我目前正在构建一个简单的产品管理,它使用状态来跟踪产品状态生命周期。我最近添加了一个名为“handles”的新表,它只是product_id
和handle
(简单的文本输入)。为简单起见:
我创建了一个 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;
}
只要更新的顺序是这样的,它就可以完美地工作:
- 新建
product
状态为“草稿” - 添加新
handle
产品并保存产品 - 将状态切换为“详细”
这有效,因为现在我确实有一个“句柄”并且我的代码有效(count()
不为零,所以上面的检查不会抛出UnprocessableEntityException
)。
但是如果我的步骤是这样的:
- 创建新
product
的状态为“详细”(没有任何handle
)
我不知道如何编写我的钩子,所以我可以检查使用时未保存的关系字段item.create.products:before
。任何提示我如何在将关系字段保存到数据库时检查它?
提前致谢!欢迎任何帮助!