2016-11-23 7 views
0

私のDoctrineリポジトリの結果があらかじめ定義されている必要があります。私はこのように私の配列をfindBy方法を使用して渡しています:定義済みの配列基準の結果を返すようDoctrineに設定します。

$this->myReposirtory->findBy(['value1', 'value2', 'value3']);

問題はDoctrineは自動的にidによって返される結果を注文することを今です。私が必要とするのは、配列入力の正確な順序です。だから、

/** 
* Finds entities by a set of criteria. 
* 
* @param array  $criteria 
* @param array|null $orderBy 
* @param int|null $limit 
* @param int|null $offset 
* 
* @return array The objects. 
*/ 
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) 
{ 
    $persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName); 

    return $persister->loadAll($criteria, $orderBy, $limit, $offset); 
} 

、第2引数は、ORDER BYのためである:

答えて

1

データベースからカスタム注文を抽出することはできません。パラメータが[5、4、6]の場合、ソート方法に応じて[4,5,6]または[6,5,4]になります。これはmysqlのデフォルト動作です。

これらの3つの値を取得する場合は、クエリを分離したり、ソート可能な値を追加して必要な順序で取得したりできます。あるいは、あなたのコードで水和物のプロセスの後にそれらを注文することもできます。

+0

"またはあなたのコードでハイドレート処理の後に注文することができます。残念ながら、私はこれで終わります:( – Julian

+2

テーブル構造を変更できる場合は、 'custom_order_x'フィールドを追加し、値を手動で入力するか、カスタム条件を使用することをお勧めします。 –

0

これはfindBy方法がどのように見えるかです。

例のクエリは次のようになります。

$this->myReposirtory->findBy([...], ['someValue' => 'ASC']); 

それとも、あなたはより多くのカスタマイズが必要な場合、あなたはあなたのリポジトリにカスタムメソッドを書くことができます。 詳細情報:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html#working-with-querybuilder

+0

ありがとうございますが、私の注文は100%顧客主導で、データベースとは独立しています。 – Julian

+0

Hmmm ...あなたの注文はデータベースから独立していると言ってどういう意味ですか? –

+0

私は、それはユーザー入力なしで任意のデータベースで注文できないことを意味します。注文は顧客によって行われるため。 – Julian

関連する問題