gpt4 book ai didi

php - Symfony2 查询生成器添加自定义顺序查询

转载 作者:行者123 更新时间:2023-11-30 22:15:59 26 4
gpt4 key购买 nike

我正在使用 QueryBuilder 查询所有产品以及我项目中的所有连接。然后我使用分页在前端显示它们。有时我需要按特定顺序获取它们,但我无法在 QueryBuilder 中找到执行此操作的方法..

例如,一个查询按 id 返回产品:70,71,72,73,74,75但如果我有一些自定义订单,我想显示它:72,74,75,70,71,73

所以在我的查询构建器中我做了这样的事情:

public function querySortedProductsInCategories($id, $type, $slug, $sort)
{
$qb = $this->createQueryBuilder('p');
$qb->addSelect(array('p', 'gallery'));
$qb->addSelect(array('p', 'media'));
$qb->addSelect(array('p', 'image'));
$qb->leftJoin("p." . $type, "c");
$qb->leftJoin('p.gallery', 'gallery');
$qb->leftJoin('gallery.galleryHasMedias', 'media');
$qb->leftJoin('media.media', 'image');
$qb->where("c." . $type. "= :id ");
$qb->andWhere($qb->expr()->in('p.id', $sort));
$qb->SetParameter('id', $id);
return $qb->getQuery();
}

生成的查询看起来像这样:

'SELECT p, p, gallery, p, media, p, image FROM Mp\ShopBundle\Entity\Product p LEFT JOIN p.subcategory c LEFT JOIN p.gallery gallery LEFT JOIN gallery.galleryHasMedias media LEFT JOIN media.media image WHERE c.subcategory= :id  AND p.id IN('70', '73', '76', '72', '71', '74')'

但返回的数组仍然按 Id 排序...

如果我尝试做类似的事情:

    $qb->orderBy("p.id", $sort);

但是当然我得到array to string conversion错误...

有哪些可能的方法可以做到这一点?

最佳答案

您可以通过使用学说的 queryBuilder from 函数indexBy 参数来实现一些开销

public function from($from, $alias, $indexBy = null);

这会将结果数组的索引设置为此参数中字段的值。

然后你可以按照你的方式重新排序这个数组

public function querySortedProductsInCategories($id, $type, $slug, $sort)
{
$qb = $this->createQueryBuilder('p');
$qb->from('Product', 'p', 'p.id';
[... the rest of your query]
$result = $qb->getQuery()->getResult();
// Here you have an array indexed by the id of your products and you can order it using your $sort array of products ids
uksort($result,
function ($key1,$key2) use ($sort) {
$product1Position = array_search($key1,$sort);
$product2Position = array_search($key2,$sort);
if ( $product1Position === false || $product2Position === false) {
return 0;
}
return ($product1Position < $product2Position) ? -1 : 1;
}
);
return $result;
}

资料来源: http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/query-builder.html#high-level-api-methods http://php.net/manual/en/function.uksort.php

祝你好运

关于php - Symfony2 查询生成器添加自定义顺序查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38260468/

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