php - 使用相关字段更新项目的示例过滤器挂钩
问题描述
我有 3 个集合:“客户”、“经销商”和“订单”。客户通过多对一关系与经销商相关联。经销商通过一对多的关系与客户相关联。订单通过多对一关系与客户相关。
我想使用先前配置的多对一关系根据所选客户自动设置 orders.reseller 字段。
$payload 对象只包含“订单”列,所以我看不到“customer.reseller”,只有“客户”。
https://docs.directus.io/extensions/hooks.html#filter-hooks
点符号 get() 和 has() 方法可以使用点符号来访问子元素。例如:get('data.email')。
Payload 对象 Payload 对象是 Arrayable,这意味着您可以将数据作为数组 $payload['data']['email] 进行交互,但您不能这样做 \Directus\Util\ArrayUtils::get($payload, 'data 。电子邮件')。
尝试使用时,\Directus\Util\ArrayUtils::get()
我没有返回任何结果,但$payload->get()
按预期工作。在下面的示例中,我只是将返回的数组设置为订单项中的文本字段 ('out') 以进行测试。
'filters' => [
'item.create.orders:before' => function (\Directus\Hook\Payload $payload) {
$data = $payload->getData();
//$data = $payload->get('customer');
//$data = \Directus\Util\ArrayUtils::get($payload,'customer');
$out = json_encode($data);
$payload->set('out',$out);
return $payload;
}
我希望 ArrayUtils 中的 get 函数允许我以数组的形式与其交互,并根据所选的“客户”从“客户”表中检索“经销商”列。
有效负载对象只返回一个数组,如:{"order_number":"1234","customer":"15"}
“客户”字段应匹配“客户”表中的“ID”(行),我想查看“经销商”列的值。
解决方案
我的解决方案是使用 ZendDB 查询而不是 get 函数。
https://docs.directus.io/api/data.html#zend-db-tablegateway
'item.create.orders:before' => function (\Directus\Hook\Payload $payload) {
$customer_id = $payload->get('customer'); //get customer_id from 'order' item
$container = \Directus\Application\Application::getInstance()->getContainer();
$dbConnection = $container->get('database'); // connect to database
$table = new \Zend\Db\TableGateway\TableGateway('customers', $dbConnection); // connect to table
$results = $table->select(['id' => $customer_id]); // select row with 'customer_id'
$customer = $results->current(); // get array of current 'customer' row
$reseller = $customer->reseller; // get 'reseller' column value from row
$payload->set('reseller',$reseller); //Update Payload
return $payload;
}
推荐阅读
- reactjs - 处理 axios react-redux 应用程序中的 401 未授权错误
- ios - How make dynamic collectionview cells?
- javascript - Add data to the view after ajax success without reload the page
- selenium - How to date in the datpicker using selenium where calender defaults to Year selection first?
- javascript - JavaScript - 视频自动播放
- php - 无法使用 MySQL 查询检查两列中的值
- amazon-web-services - 如何通过 AWS EKS 在 ECR 中使用 Docker 映像
- swift - 如何修复 Swift 枚举 switch case 问题
- javascript - Django:一些字符串会自动添加到我的代码中
- javascript - 如何合并间距数组