前提
Laravel, phpunitで、sqliteのインメモリー機能を使ってテストを書いてる時に、以下sql構文エラーに遭遇した
SQLSTATE[HY000]: General error: 1 no such function: FIELD (SQL: select * from ... by FIELD(id, 1) limit 10000 offset 0)
運用、開発はmysqlを使っていて、テスト時のみsqliteに切り替えるよう実装していた。
試した範囲では、FIELD関数のみエラーが出ていた。
結論
FIELD関数はmysqlの機能のためsqliteではエラーになってしまうようだった。
そのため、使用するDBによってFIELDを使う部分を条件分岐させることでとりあえず解決した。
if (env('DB_CONNECTION') === 'mysql') {
$this->query->orderByRaw('FIELD(' ...')');
}