在 Symfony2 Doctrine findBy() 中保留数组的初始顺序

Fre*_*oft 5 php entity doctrine symfony doctrine-orm

我有一个$newsList包含以下值的 ID 数组 ( ):4,2,1,3

我正在尝试从实体的数据库中获取一些数据:

$news=$this->getDoctrine()->getRepository('Bundle:News')->findBy(array('id' => $newsList));
Run Code Online (Sandbox Code Playgroud)

$newsList数组代表新闻实体的真实 ID。

但是当我这样做时:

foreach($news as $n){
    $n->getId();
}
Run Code Online (Sandbox Code Playgroud)

ID 按顺序排列:1,2,3,4

如何在 foreach 中保留从头开始的顺序?

cha*_*asr 1

当您进行全局查询时,您可以仅按给定属性和给定排序顺序对结果进行排序,因此正如前面的答案所指出的,您不能。

为了让你的结果完全按照你给定的数组排序,你可以这样做:

$newsList = [3, 1, 4, 2];
$newsRepo = $this->getDoctrine()->getRepository('Bundle:News');

foreach ($newsList as $id) {
    $new = $newsRepo->findOneBy['id' => $id];

    if ($new !== null) {
        $news[] = $new;
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样,您的结果的排序与 完全相同$newsList,例如:

foreach ($news as $n) {
    print $n->getId();
}

// Output: 3 1 4 2
Run Code Online (Sandbox Code Playgroud)

  • 如果 `$newsList` 更大的话可能会有很多查询...;-) (2认同)