プロジェクト開発では、いくつかの特別な値が配列のインデックスとしてよく使用されます。通常、最初にデータをクエリしてから、配列をループ内で必要な形式。ただし、YII2 フレームワークは、より単純なメソッド IndexBy() を提供します。
all() メソッドを呼び出すと、連続する整数値でインデックス付けされた配列が返されます。
特定のフィールドまたは式の値をインデックス結果セット配列として使用したい場合があります。この目的を達成するには、all() を呼び出す前に、indexBy() メソッドを使用します。
例:
// 以uid作为key值 $query = User::find() ->select(['uid', 'name']) ->indexBy('uid') ->asArray() ->all();
クエリ結果は次のとおりです:
{ "1001": { "uid": "1001", "name": "张三" }, "1002": { "uid": "1002", "name": "李四" }, "1003": { "uid": "1003", "name": "王五" } }
式の値をインデックスとして使用する必要がある場合は、匿名関数を渡すだけで済みます。 IndexBy() メソッド:
// 以uid和name组合作为key值 $query = User::find() ->select(['uid', 'name']) ->indexBy(function ($row) { return $row['uid'] . $row['name']; // row中使用的字段名只能是查询返回的字段名 }) ->asArray() ->all();
クエリ結果は次のとおりです:
{ "1001张三": { "uid": "1001", "name": "张三" }, "1002李四": { "uid": "1002", "name": "李四" }, "1003王五": { "uid": "1003", "name": "王五" } }
注: groupBy() や orderBy() などのクエリ メソッドとは異なり、これらはSQL クエリ ステートメントから使用され、このメソッド (indexBy) はデータベースがデータを取得した後にのみ有効になります。これは、それらの列名のみを SELECT クエリで使用できることを意味します。さらに、テーブル名接続を使用して customer.id などの列名を取得する場合、結果には id 列のみが含まれるため、テーブル名のプレフィックスを付けずに ->indexBy(‘id’) を呼び出す必要があります。
推奨: 「YII チュートリアル 」
以上がYii2でindexBy()を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。