Open5
Laravelのwhereで「ではない」「以外」を指定する時に「!=」、「<>」どちらを使うのが良いの?
概要
以下の書き方はどちらも想定どおりに機能しましたが結局どちらを使うのが望ましいのか、色々調べましたが確定的な情報が見つからないのでもしご存知の方はコメントを投稿いただけたら嬉しいです🙇♂️
// !=
Model::where('column', '!=', 'value')->get();
// <>
Model::where('column', '<>', 'value')->get();
調べてわかったこと
- どちらも機能はする
- が、
!=
だと該当のカラムがnull
の場合は抽出できない(らしい) - どちらが良いというよりは上記の条件を見ながらマッチする方を使うのがいいのか?とも思う
調べた記事
where('role', '!=', '1')
と書いてしまうのは間違いです。」と記載されていたのですがその理由が記載されておらず悔しいですが腹落ちしていません...)
!=
と<>
で発行されているSQLを確認すると、使用している演算子がそのままSQLに使われている。
where(column != ?)
where(column <> ?)
補足:Laravelで発行されているSQLを確認する方法
// !=
Model::where('column', '!=', 'value')->toSql();
// <>
Model::where('column', '<>', 'value')->toSql();
QueryBuilderへのwhereNot
の追加を提案するIsuue(情報提供ありがとうございました)
やりとりを追った感じ、whereNotは追加されることなくClosedになっていて、Laravel8時点でも追加されていない。
Isuueに「HasWhereNotTraitを使うことでIssueを挙げた人の問題は解決できますよ〜」と書かれているけど、このスクラップの趣旨とはズレるのでこれはここまでにする。
-
<>
:SQL標準規格の比較演算子 -
!=
:DBMS独自定義または拡張の比較演算子
大体のDBMSでどちらも使える(以下の記事ではMySQL、PostgreSQL、Oracleでは使えると書いている)。
普段使っているMySQLでも公式ドキュメントにどちらも使えることが明確に記載されている。