Jeremy Hicks, terima kasih atas ekstensi Anda .Saya tidak tahu bagaimana menghubungkan fungsi Anda dengan doktrin, tetapi akhirnya saya menemukan jawabannya.
$doctrineConfig = $this->em->getConfiguration();
$doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensions\Query\Mysql\Field');
Saya membutuhkan FIELD
berfungsi untuk memesan Entitas saya yang saya pilih dengan IN
ekspresi. Tetapi Anda dapat menggunakan fungsi ini hanya di SELECT, WHERE, BETWEEN
klausa, bukan dalam ORDER BY
.
Solusi:
$qb
->select("r, field(r.id, " . implode(", ", $ids) . ") as HIDDEN field")
->from("Entities\Round", "r")
->where($qb->expr()->in("r.id", $ids))
->orderBy("field");
Untuk menghindari penambahan field
alias ke baris hasil Anda, Anda perlu memasukkan HIDDEN
kata kunci. Jadi begini cara mengurutkan nilai dalam IN
ekspresi dalam Doktrin 2.2.