Php 每个挂钩需要有条件的M2O入口

Php 每个挂钩需要有条件的M2O入口,php,directus,Php,Directus,我目前正在构建一个简单的产品管理,它使用状态跟踪产品状态生命周期。我最近添加了一个名为“handles”的新表,它只是product\u id和handle(简单文本输入)。为简单起见: 我已经创建了一个hook.php文件,该文件已经加载并运行 $filter=功能(有效负载$Payload){ $container=Application::getInstance()->getContainer(); $itemsService=新的itemsService($container); $i

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

我已经创建了一个hook.php文件,该文件已经加载并运行

$filter=功能(有效负载$Payload){
$container=Application::getInstance()->getContainer();
$itemsService=新的itemsService($container);
$item=$itemsService->find('products',$payload->get('id'),['fields'=>'状态,句柄。*']);
$statuss=['detailed'];
if(在_数组中($item['data']['status'],$statuss)| |在_数组中($payload->get('status'),$statuss)){
如果(!$item['data']['handles']| |!count($item['data']['handles'])){
抛出新的UnprocessableEntityException('无法发布没有句柄的产品!');
}
返回$payload;
}
只要更新的顺序是这样的,它就能完美地工作:

  • 创建状态为“草稿”的新产品
  • 添加新的
    句柄
    并保存产品
  • 将状态切换到“详细”
  • 这是可行的,因为现在我有了一个“句柄”,我的代码也可以工作(
    count()
    不是零,所以上面的检查不会抛出
    UnprocessableEntityException

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

  • 创建新的
    产品
    ,状态为“详细”(无任何
    句柄

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

    提前谢谢!欢迎任何帮助