0

symfony の問題があります: 機能的にはうまく動作しますが、これは私が望むようには機能しません。

$res = array("4","2","1","3"); // LIST ID (a.id)
$paginas = new sfDoctrinePager('TbArticle', 2);
$paginas->setQuery(Doctrine::getTable('TbArticle')->createQuery('a')->where('a.ifactive = 1')->andWhere('a.dirimage=1')->andWhere('a.stock<>0')->whereIn("a.id", $res));
$paginas->setPage($page);
$paginas->init();

正常に動作しますが、 を呼び出すgetResults()と、配列の順序が正しくありません。たとえば、この並べ替えは次を返します1,2,3,4。そして、私は得るのが好きです: 4, 2, 1, 3( $res)

手伝って頂けますか?

4

1 に答える 1

1

残念ながら、これはクエリでは実行できません。

MySQL クエリはORDER BY、昇順または降順で句を使用して並べ替えて返すことができます。配列内の要素は none を使用します。句のパラメータとして配列を渡すと、WHERE INご覧のとおり、MySQL は要素の順序を気にしません。

幸いなことに解決策があります:)

まず、Doctrine の機能を使用して、必要なものでインデックス付けされた結果のテーブルを作成する必要があります。これを使って:

Doctrine::getTable('TbArticle')->createQuery('a INDEX BY id')->...;

これは、配列キーが行の ID である結果の配列を返します。次に、結果配列を一致するように再配置できます( Doctrine によって返された行がある$resと仮定します):$rows

foreach ($res as $i) {
    $new_array[] = $rows[$i];
}

トリッキーな部分は、ページネーターで機能させることです。しかし、それもできると確信しています (ページネーターから結果を取得し、表示する前に並べ替えてみてください)。

于 2013-03-28T18:15:05.730 に答える