Hello,
I have a graphql function that add metafields to each variant of the selected products.
My code is working fine BUT i know that doing it in foreach loop is not ideal. Any tips are highly appreciated.
Selected Products are actually coming from a webhook payload. Here’s my sample code.
$handle = $data[‘handle’];
$query = 'query($handle:String!) {
productByHandle(handle:$handle) {
variants(first: 50) {
edges {
node {
id
createdAt
}
}
}
}
}
';
$variables = [
‘handle’ => $handle
];
$payload = [
‘query’ => $query,
‘variables’ => $variables
];
$response = $client->request(‘POST’, $GLOBALS[‘GRAPHQL’] , [‘json’ => $payload]);
$body = json_decode($response->getBody()->getContents(), TRUE);
$variants = $body[‘data’][‘productByHandle’][‘variants’][‘edges’];
foreach($variants as $key => $variant) {
$id = $variant[‘node’][‘id’];
$createdAt = $variant[‘node’][‘createdAt’];
$query2 = ‘mutation($input: ProductVariantInput!) {
productVariantUpdate(input: $input) {
productVariant {
metafield(namespace:“variant”, key: “date_created”) {
value
}
}
}
}’;
$variables2 = [
‘input’ => [
‘id’ => $id,
‘metafields’ => [
‘namespace’ => ‘variant’,
‘key’ => ‘date_created’,
‘value’ => json_encode($createdAt),
‘type’ => ‘single_line_text_field’
]
]
];
$payload2 = [
‘query’ => $query2,
‘variables’ => $variables2
];
$response2 = $client->request(‘POST’, $GLOBALS[‘GRAPHQL’] , [‘json’ => $payload2]);
$body2 = $response2->getBody()->getContents();
print_r($body2);
}