1.上で直接SQLクエリを構築する方が良い雄弁動作ではありません結果?
実際にはデータベースの照合で、文字列の比較および順序付け方法が決まります。
あなたの現在の(テーブル)照合は、大文字と小文字が区別されます。 Postgresでは、この照合はおそらく 'C'または 'POSIX'です。これは、App\User::where('name', 'aDaM')->first();
がadamのエントリを取得せず、App\User::orderBy('name')->get();
が大文字小文字の区別のあるアルファベット順でユーザー名を取得することを意味します。反対の結果を得るには、大文字と小文字を区別しない照合が必要です。 Postgresでは、このような照合の例はen_US.UTF8です(エンコーディングがUTF8の場合)。
2.可能な解決策
(1)だけ
App\User::orderBy('name')->get()->sortBy('name', SORT_NATURAL|SORT_FLAG_CASE);
はLaravel 5.3ので、雄弁のget()
は、コレクションを返す(Laravelに)大文字と小文字を区別しないために、クエリの結果を置きます。
(2)
DB::select('select name from users order by name COLLATE "en_US.utf8"');
例えば
、(Laravelに)照合を指定する生のSQLクエリを書くこの文は、配列を返します。
(3)データベースの別の照合順序を選択してください。このソリューションは、今後同様の問題を回避します。
あなたはDEV状況にあり、Laravelの移行とシーダーで作業する場合の最善の解決策は
- 右照合
- でマイグレーションを実行して、データベース
- が再びデータベースを作成して削除することですそしてシーダー
あなたが他のdevの状況にあるとき、あなたは を
することができます210
- 削除
- (&を置き換える検索する>テキストエディタ)をダンプファイルに新しいものにrefenceによって古い照合への参照を交換
- (作成オプションを使用します)ダンプファイルにデータベースをエクスポートしますデータベース
- はあなたにも実行しているデータベースの照合順序を変更することができますが、データベースだけでなく、テーブルやカラム(デフォルト)照合設定を有するための準備をすること
注意ダンプ・ファイルをインポートしますインデックスの問題
どこから検索を行っていますか? –
これはLaravalの問題ではなく、PostgreSQLの問題です。 PostgreSQLは注文しています。ヒント:フィールドの値に適用される関数に基づいてPostgreSQLで注文することができます。たとえば、 'ORDER BY UPPER(field_name_goes_here)'は完全に有効なソート方針です。 – GordonM
@schellingerhtありがとう。しかし、これは重複していません。私の質問は、 'sortBy'とコレクションではなく、' orderBy'とEloquentについてです。 –