假设我有两个表,一个包含产品,另一个包含价格。
在Graphql中,查询可能如下所示:
option {
id
price {
id
optionID
price
date
}
description
}
我向用户提供一个表格(在React中),他们可以在同一时间输入产品详细信息和价格。
当他们提交表单时,我需要在“product”表中创建一个条目,然后在“price”表中创建一个相关条目。
我是Graphql的新手,React就此而言,并且发现它是一个陡峭的学习曲线并且一直在关注Apollo教程并阅读文档但是到目前为止,这个任务的解决方案仍然是个谜!
有人可以让我摆脱痛苦并给我,或指出我最方便的处理突变所需的例子吗?
答案 0 :(得分:2)
简而言之,如果您希望针对尽可能少的请求进行优化,那么服务器实际应该处理这些事情。
问题:这里的问题是您有依赖关系。您需要先创建产品,然后使用该产品的ID,将其与新价格相关联。
解决方案:在服务器上实现此功能的最佳方法是在突变输入中向Product添加另一个字段,以便在同一请求输入中输入Price的详细信息。这在Scaphold上称为"nested create"。
例如:
<?php
namespace ParametersBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class CountriesType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options){
$fooChoices = $options['choices'];
$builder->add('active',CheckboxType::class)
->add('countries',TextType::class)
->add('countries',ChoiceType::class,['choices' => $fooChoices,])
->add('save', SubmitType::class, array('label' => 'Create Post'));
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => null,
)
//'data_class' => 'DataBaseBundle\Entity\Cities'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'country';
}
}
然后,在服务器上,您可以解析解析器参数中的price对象,并在创建产品时创建新的price对象。同时,您也可以在服务器上同时关联它们。
希望这有帮助!