gpt4 book ai didi

Symfony Doctrine 数据类型仅适用于 findBy 不适用于 querybuilder

转载 作者:行者123 更新时间:2023-12-02 11:59:33 26 4
gpt4 key购买 nike

我有自定义数据类型,它在使用 FindBy 时按预期工作...但在使用查询生成器时却不然。很抱歉这篇文章很长,但我认为更多信息应该有所帮助。

这与这个未回答的问题相同: Doctrine 2 Custom Types

数据类型:

...
class MyHappyType extends Type
{
...
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return 'hippies: '.$value;
}

public function convertToPHPValue($value, AbstractPlatform $platform)
{
return 'doubleHippies: '.$value;
}
...
public function getName()
{
return 'hippies';
}
}

实体:

// Entity class

...
class Hippie
{

/**
* @ORM\Id
* @ORM\Column(type="integer", unique=true)
*/
protected $id;

/*
* @ORM\Column(type="hippies")
*/
protected $Sandals;

}

存储库:

...
class HippiesRepository extends EntityRepository
{
public function useQueryBuilder($sandals){
$qb = $this->createQueryBuilder('hippie');
$qb->select('hippie')
->where('hippie.Sandals = :sandals')
->setParameter('sandals', $sandals);

return $qb->getQuery()->getResult();
}
}

最后, Controller :

public function hippiesAction()
{
// this returns an entity with $hippie1->sandals == 'doubleHippies: hippies: red'
// which is expected behaviour
$hippie1 = $em->getRepository('HappyHippiesBundle:Hippie')->findOneBySandals('red');

// this one returns no results, when checking queries run I see that
// $sandals value isn't translated in to 'hippies: red'
$hippie2 = $em->getRepository('HappyHippiesBundle:Hippie')->useQueryBuilder('red');
}

简而言之,使用 QueryBuilder 时不会转换数据类型,仅在使用 FindBy 时...

最佳答案

您需要在实体配置中定义存储库类:

/**
* @ORM\Entity(repositoryClass=""AcmeDemoBundle\Entity\HippiesRepository")
*/
class Hippie
{
// ...
}

参见Custom Repository classes了解更多信息。

更新:

您可能还想摆脱 ->select('hippie')。当您使用该方法在存储库类中创建QueryBuilder时,该方法将自动为您调用selectfrom方法(请参阅EntityRepository.php 文件以获取更多信息)。在这种情况下,您需要做的就是:

 $qb = $this->createQueryBuilder('hippie');
$qb->where('hippie.Sandals = :sandals')
->setParameter('sandals', $sandals);

return $qb->getQuery()->getResult();

关于Symfony Doctrine 数据类型仅适用于 findBy 不适用于 querybuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25664764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com