gpt4 book ai didi

php - 使用 DoctrineExtensions Translatable Symfony2 的数据库查询太多

转载 作者:搜寻专家 更新时间:2023-10-31 21:06:51 27 4
gpt4 key购买 nike

我刚刚从 StofDoctrineExtensionsBundle 安装了 Translatable DoctrineExtensions

我有两个具有多对一关系的实体“空间”和“设备”:

/**
* Space
* @ORM\Table(name="space")
* @ORM\Entity(repositoryClass="Project\ProjectBundle\Repository\PlaceRepository")
*/
class Space implements Translatable
{
/**
* @var integer
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;


/**
* @ORM\OneToMany(targetEntity="Project\ProjectBundle\Entity\Equipment", cascade={"persist"})
*/
private $equipments;

/**
* @var string
* @Gedmo\Translatable
* @ORM\Column(name="name", type="string", length=255, nullable=true)
*/
private $name;

/**
* @Gedmo\Locale
*/
private $locale;

public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
}

和:

/**
* Equipment
* @ORM\Table("equipment")
* @ORM\Entity(repositoryClass="Project\ProjectBundle\Repository\EquipmentRepository")
*/
class Equipment implements Translatable
{
/**
* @var integer
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
* @Gedmo\Translatable
* @ORM\Column(name="name", type="string", length=255, nullable=true)
*/
private $name;

/**
* @Gedmo\Locale
*/
private $locale;

public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
}

spaceRepository 中,我的 get 查询函数中有:

public function getSpace($id) {
$query->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');
$query->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,$locale);
$db = $this
->createQueryBuilder('s')
->andWhere('s.id = :id')
->setParameter('id', $id)
->leftJoin('s.equipments', 'e')
->addSelect('e');

$query = $db->getQuery();
$query->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');
$query->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE, 'en');

return $query->getSingleResult();
}

TranslationWalker 应该在一个查询中获得所有结果,但它不起作用,最后,我对每个设备都有一个查询(超过 150 个查询)。

如何在一个查询中获取所有已翻译的元素?

最佳答案

尝试手动设置保湿模式,因为您的问题与 this 有关问题。

看看这个answer关于如何设置补水模式。它对我有用。

在我的例子中,我只是将以下提示添加到查询中

use Doctrine\ORM\Query;
use Gedmo\Translatable\Query\TreeWalker\TranslationWalker;
...
$query->setHydrationMode(TranslationWalker::HYDRATE_OBJECT_TRANSLATION);
$query->setHint(Query::HINT_REFRESH, true);

希望对您有所帮助!

关于php - 使用 DoctrineExtensions Translatable Symfony2 的数据库查询太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977038/

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