Symfony Doctrine LAZY 数据加载
Symfony Doctrine LAZY Data loading
我想将一些数据传递给 JavaScript 但我得到了这样的空变量
var testsCompany = {};
var testparams = "[{}]";
doctrine 中延迟数据加载的一些问题,我尝试更改 fetch 属性值 ManyToOne 关联但徒劳。
这是我的代码:
<script type="text/javascript">
var testsCompany = "{{ testsCompany|json_encode()|raw}}";
var testparams = "{{ testparams|json_encode()|raw}}";
</script>
这是我的实体:
class TestParams
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Many testparams have One test.
* @ORM\ManyToOne(targetEntity="Tests", inversedBy="testparams",fetch="EAGER")
* @ORM\JoinColumn(name="test_id", referencedColumnName="id")
*/
private $test;
/**
* Many testparams have One param.
* @ORM\ManyToOne(targetEntity="Params", inversedBy="testparams", fetch="EAGER")
* @ORM\JoinColumn(name="param_id", referencedColumnName="id")
*/
private $param;
/**
* @var bool
*
* @ORM\Column(name="required", type="boolean")
*/
private $required;
public function __construct()
{
$this->test = new ArrayCollection();
$this->param = new ArrayCollection();
}
public function __toString()
{
return '*';
}
}
这是控制器代码:
/**
* @Route("/generate/{id}", name="prestashoptest_db_generate")
*/
public function generateAction(Request $request)
{
$testId = $request->get('id');
$testRepo = $this->getDoctrine()->getRepository('PrestaShopTestBundle:Tests');
$testParamsRepo = $this->getDoctrine()->getRepository('PrestaShopTestBundle:TestParams');
$testParams = $testParamsRepo->findBy(array("test" => $testId));
$testsCompany = $testRepo->find($testId);
return $this->render('PrestaShopTestBundle:BOTest:generate.html.twig',
array(
"testsCompany" => $testsCompany,
"testParams" => $testParams,
)
);
}
终于有了解决办法:
我安装了一个序列化器:
作曲家要求 jms/serializer-bundle
配置它:
安装包后,只需将包添加到 AppKernel.php 文件:
new JMS\SerializerBundle\JMSSerializerBundle(),
- 并合并 twig 助手:
<script type="text/javascript">
var testsCompany = {% autoescape %}{{ testsCompany|serialize|raw }}{% endautoescape %};
var testParams = {% autoescape %}{{ testParams|serialize|raw }}{% endautoescape %};
</script>
我想将一些数据传递给 JavaScript 但我得到了这样的空变量
var testsCompany = {};
var testparams = "[{}]";
doctrine 中延迟数据加载的一些问题,我尝试更改 fetch 属性值 ManyToOne 关联但徒劳。
这是我的代码:
<script type="text/javascript">
var testsCompany = "{{ testsCompany|json_encode()|raw}}";
var testparams = "{{ testparams|json_encode()|raw}}";
</script>
这是我的实体:
class TestParams
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Many testparams have One test.
* @ORM\ManyToOne(targetEntity="Tests", inversedBy="testparams",fetch="EAGER")
* @ORM\JoinColumn(name="test_id", referencedColumnName="id")
*/
private $test;
/**
* Many testparams have One param.
* @ORM\ManyToOne(targetEntity="Params", inversedBy="testparams", fetch="EAGER")
* @ORM\JoinColumn(name="param_id", referencedColumnName="id")
*/
private $param;
/**
* @var bool
*
* @ORM\Column(name="required", type="boolean")
*/
private $required;
public function __construct()
{
$this->test = new ArrayCollection();
$this->param = new ArrayCollection();
}
public function __toString()
{
return '*';
}
}
这是控制器代码:
/**
* @Route("/generate/{id}", name="prestashoptest_db_generate")
*/
public function generateAction(Request $request)
{
$testId = $request->get('id');
$testRepo = $this->getDoctrine()->getRepository('PrestaShopTestBundle:Tests');
$testParamsRepo = $this->getDoctrine()->getRepository('PrestaShopTestBundle:TestParams');
$testParams = $testParamsRepo->findBy(array("test" => $testId));
$testsCompany = $testRepo->find($testId);
return $this->render('PrestaShopTestBundle:BOTest:generate.html.twig',
array(
"testsCompany" => $testsCompany,
"testParams" => $testParams,
)
);
}
终于有了解决办法:
我安装了一个序列化器:
作曲家要求 jms/serializer-bundle
配置它:
安装包后,只需将包添加到 AppKernel.php 文件:
new JMS\SerializerBundle\JMSSerializerBundle(),
- 并合并 twig 助手:
<script type="text/javascript"> var testsCompany = {% autoescape %}{{ testsCompany|serialize|raw }}{% endautoescape %}; var testParams = {% autoescape %}{{ testParams|serialize|raw }}{% endautoescape %}; </script>